본문 바로가기

코딩 테스트

[프로그래머스] (Lv.1) 3진법 뒤집기 *

728x90

문제


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

 

 

-  출력 예시  -

정답 코드


<  내 정답 코드  >

class Solution {
    public int solution(int n) {
        String str = "";
        int answer = 0;
        int j = 0;
        
        while(3 <= n) {
            str += n % 3 + "";
            n /= 3;
        }
        str += n;
        
        for (int i = str.length() - 1; i >= 0; i--) {
            answer += (int) (Math.pow(3, i) * (str.charAt(j++) - '0'));
        }
        
        return answer;
    }
}

 

<  타인 답변 코드  >

class Solution {
    public int solution(int n) {
        String a = "";

        while(n > 0){
            a = (n % 3) + a;
            n /= 3;
        }
        a = new StringBuilder(a).reverse().toString();

        return Integer.parseInt(a, 3);
    }
}

이것을 주의하자!


-  기본적인 알고리즘은 다음과 같다. 

   (1)  해당 수를 3 으로 나눈 나머지를 String 문자열에 하나씩 더한다.

   (2)  나눈 몫을 다시 n 으로 선언한다.

   (3)  위 작업을 몫이 0이 되기 전까지 지속한다.

   (4)  변환된 3진수 String 문자열을 다시 10 진수로 바꾼다.

 

-  내 코드는 너무 어렵게 생각했다. 타인 답변 코드를 보면 훨씬 간단하게 작성할 수 있다.

 

-  2진수,  3진수,  8진수,  16진수 등... 여러 진법들을 다시 10진수로 바꾸는 방법은 직접 계산할 수도 있지만, 메서드를 이용하면 간단하다. Integer.parseInt( a , n ) 으로 두번째 매개변수에 해당 진법이 무엇인지 넣으면 된다! 해당 문제에선 3진수를 10진수로 바꿔야 하니깐, Integer.parseInt( a,  3 ) 으로 작성하면 된다.

 

-  10진수를 다양한 진수로 바꾸는 메서드는 Integer.toBinaryString( )Integer.toOctalString( )Integer.toHexString( ) 이 있다.