본문 바로가기

Algorithm/Problems

[JAVA]3진법 뒤집기(Programmers)

문제

문제

 자연수 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을 retrun 해야 합니다.

입출력 예 #2

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229
  • 따라서 229를 return 해야 합니다.

풀이

 수를 n진법으로 바꾸는 연산은 나머지 연산을 반복하면 된다. 10진법 이상의 경우에는 배열을 통해 index와 value를 이용해 가능하다.

 또한, n진법으로 변환한 수를 10진법으로 다시 변환하는 것은 제곱을 이용해 변환한다.

코드

    public int solution(int n) {
        ArrayList<Integer> arr = new ArrayList();
        while(n != 0){
            arr.add(n % 3);
            n /= 3;
        }
        int answer = 0;
        for(int i=0; i < arr.size(); i++){
            if(arr.get(i) == 0)
                continue;
            answer += Math.pow(3, arr.size() - i - 1) * arr.get(i);
        }
        return answer;
    }