[프로그래머스,Level 1] 3진법 뒤집기(JAVA 구현)
코테/프로그래머스(Programmers)

[프로그래머스,Level 1] 3진법 뒤집기(JAVA 구현)

반응형

- 첫 풀이 및 정답풀이

  이 문제의 핵심은 10진법에서 n진법으로의 변환 방법을 알고 있냐는 것 같다. 10진법에서 특정 진법으로의 변환은 해당 진법의 수로 나누어 몫이 0이 나올 때까지 나머지를 역으로 취해주는 것이다. 예를 들어 예제 1번의 경우 45를 3으로 계속해서 나누어 몫이 0이 될 때 나머지를 거꾸로 취하면, 1200이 나오게 된다. 

 

  풀이 과정에서 3진법을 앞뒤 반전하는 과정이 존재한다. 위에서 설명하였듯이 특정 진법으로의 변환은 나머지를 반대로 취하는 것이다. 다시 말해 3진법을 앞뒤 반전하는 것은 그저 정수 n을 3으로 나눈 나머지를 순서대로 취해주면 된다는 의미이며, 이를 10진법으로 변환하면 된다.

 

class Solution {
    public int solution(int n) {
        // 1. 3진법 변환의 나머지들을 취하는 변수.
        String str = "";
        // 2. 3진법 -> 10진법에 필요한 변수.
        int temp = 0;
        // 3. 10진법으로 다시 바꾼 변수.
        int answer = 0;
        // 4. n/3의 몫이 0이 될 때 까지 반복.
        while(n / 3 != 0){
            // 4-1. 나머지를 취한 후, n을 갱신.
            str+=n%3;
            n/=3;
        }
        // 5. 몫이 0일 때 반복문을 나왔으므로, 마지막 나머지는 n자체가 된다.
        str+=String.valueOf(n);
        
        // 6. 변환한 3진법을 맨 뒤에서부터 10진법으로 변환 시작.
        for(int i = str.length()-1;i>=0;i--){          
            // 6-1. 해당 자릿수 * 3의 제곱수를 누적해간다.
            answer+=((str.charAt(i) - '0') * (int)Math.pow(3,temp));         
            temp++;
        }
        
        // 7. 10진법으로 변환 완료.
        return answer;
    }
}
반응형