본문 바로가기

programmers-코딩테스트 연습/Level 1. 자바

2021-06-03 / 3진법 뒤집기

문제 설명

자연수 n이 매개변수로 주어진다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하는 solution 함수를 완성한다.

 

제한사항

  • n은 1 이상 100,000,000 이하인 자연수이다.

입출력 예

n result
45 7
125 229

 

입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같다.

n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현

45 1200 0021 7
  • 따라서 7을 return 해야 한다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같다.

n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현

125 11122 22111 229
  • 따라서 229를 return 해야 한다.

 

초기코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        return answer;
    }
}

 

정답 코드

더보기
class Solution {
    public int solution(int n) {
        int answer = 0;
        int arr[]=new int[10000];
        int cnt=0;
    for(int i=0; i<arr.length; i++){
        arr[i]=0;
    }
    for (int i = 0; i <arr.length; i++) {
        arr[i] = n % 3;
        n /= 3;
        cnt++;
        if(n==0) break;
    }
    int three = 1;
    for (int i = cnt-1; i>=0; i--) {
        
            answer += arr[i] * three;
            three *= 3;
         
    }
        return answer;
    }
}

 

코드 설명

배열의 방은 넉넉하게...^^ 잡아줬지만 쓸데 없이 포문이 돌아가지 않으려고 n==0이면 break를 줬다. n이 0이면 더 이상의 계산은 필요가 없기 때문이다. 이때 cnt가 자릿수를 계산하고, 나중에 10진법으로 바꿀 때 배열의 길이가 아닌 cnt의 수만큼 돌려주면 된다.

3진법은 n을 3으로 나눴을 때 나머지를 사용한다. 10진법으로 바꿀 때는 오른쪽부터 1, 3, 9 ... 이런 식으로 3의 배수씩 커진다. 따라서 three라는 변수를 사용해 3의 배수를 곱해준다. 뒤집는 일은 배열의 방번호를 거꾸로 하면 된다.