본문 바로가기
Preparing Coding Test/Programmers L2

[Java/프로그래머스] 124 나라의 숫자

by weero 2020. 8. 7.

문제

https://programmers.co.kr/learn/courses/30/lessons/12899?language=java#

 

코딩테스트 연습 - 124 나라의 숫자

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

programmers.co.kr

 

풀이

3진법을 이용해서 풀었다.

아래의 표를 이용해서

십진법 → 삼진법 → 124 나라의 숫자 순으로 숫자를 변환시켜 주었다. 

십진법 3진법 124 나라의 숫자
1 1 1
2 2 2
3 10 4
4 11 11
5 12 12
6 20 14
7 21 21
8 22 22
9 100 24
10 101 41
11 102 42
12 110 44
13 111 111
14 112 112
15 120 124

위 표를 보면, 1과 2로 이루어진 숫자는 거의 3진법과 124 나라의 숫자가 동일하다.

예외가 되는 부분은 3진수의 0이 되는 부분이다.

0인 것을 4로 바꾸어 주고 남은 몫에 -1을 해주면 된다.

 

코드

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

        int[] answerArr;
        int idx=0, sum=0, length=0;
        while(true){
            sum+= (int) Math.pow(3,idx);
            if(sum <= n && n < sum+(int)Math.pow(3, idx+1)){
                answerArr = new int[idx+1];
                length =idx+1;
                break;
            }else{
                idx++;
            }
        }
        
        //3진법 사용
        for(int i=length-1; i>-1; i--){
            if(n%3==0){
                answerArr[i] = 4;
                n--;
            }
            else if(n%3==1)
                answerArr[i] = 1;
            else if(n%3==2)
                answerArr[i] = 2;
            n/=3;
        }
        
        for(int i=0; i<length ;i++){
            answer+=answerArr[i];
        }
        
        return answer;
    }
}