이 문제를 푸는데 시간이 좀 걸렸다.
문제는 위와 같은데 단순히 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();
}
'0x20. 알고리즘 > 0x22. 프로그래머스' 카테고리의 다른 글
[Level 2] 조이스틱 (0) | 2021.10.05 |
---|---|
[Level 2] 전화번호 목록 (0) | 2021.09.28 |
[Level 2] 멀쩡한 사각형 (0) | 2021.09.15 |
[Level 2] 단체사진 찍기 (Java) (0) | 2021.09.08 |
프로그래머스 Level 1 문제풀이 리스트 (0) | 2021.09.06 |