이 문제를 푸는데 시간이 좀 걸렸다. 

문제는 위와 같은데 단순히 10진수를 124 나라에서 사용하는 숫자로 바꾸는 문제이다. 1,2,4 세 개만 사용한다 했으니 10진수를 3진법으로 변환해봤다. 

10진법 3진법 10진법 3진법
1 1 11 102
2 2 12 110
3 10 13 111
4 11 14 112
5 12 15 120
6 20 16 121
7 21 17 122
8 22 18 200
9 100 19 201
10 101 20 202

 

그리고 3진법과 124나라의 숫자를 비교해봤다.

3진법 124나라 3진법 124나라
1 1 102 42
2 2 110 44
10 4 111 111
11 11 112 112
12 12 120 114
20 14 121 121
21 21 122 122
22 22 200 124
100 24 201 141
101 41 202 142

10진수 6을 3진법으로 변환 시 20이 되는데 이 20는 결국 124 나라의 14라는 숫자가 되어야 한다. 3진법에 의해 10진수 6이 3진수 20이 되었으니 결국 3진법으로 표현하면 13이 될 수 있다는 뜻이다. (3진수 13은 결국 3진수 20이 되므로) 이렇게 되면 3진수 20에서 2는 1이 되어야 하므로 -1 해주고 0은 3으로 바꿔야 한다. 하지만 124 나라에서는 1, 2, 4만 사용하기 때문에 결국 0은 4로 바꿔줘야 124 나라의 숫자가 된다. 

 

풀이순서

 1. 전달받은 숫자를 3으로 나눈다.

 2. 나머지가 0일 경우 4로 치환하고 몫을 -1 하고 나머지 값을 추가한다.

   2-1. 나머지가 0이 아닐 경우 그대로 값을 추가한다.

 3. 1번과 2번을 반복해서 숫자가 0이 될 때까지 반복한다. 

 

public String solution(int n) {
    StringBuilder sb = new StringBuilder();
    int rest = 0;

    while(n > 0){
        rest = n % 3;
        n /= 3;
        if (rest == 0){
            n -= 1;
            rest = 4;
        }

        sb.insert(0, rest);
    }

    return sb.toString();
}

 

 

 

+ Recent posts