문제
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
| 10진법 | 124 나라 | 10진법 | 124나라 |
|---|---|---|---|
| 1 | 1 | 6 | 14 |
| 2 | 2 | 7 | 21 |
| 3 | 4 | 8 | 22 |
| 4 | 11 | 9 | 24 |
| 5 | 12 | 10 | 41 |
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
n은 50,000,000이하의 자연수 입니다.
풀이
방법이 떠오르지 않아 다른 사람의 풀이를 참고하였다.
while문을 사용하여 조건에 맞는 경우 반복하는 로직이다.
n이 10이라고 가정할 때,
answer = arr[1] + "1" 이므로 "1"이 되고
10 % 3 === 0 조건에서 false이므로 n = Math.floor(10 / 3) = 3이된다.
n값이 존재하므로 다시 반복하여 3을 대입하면,
answer = arr[0] + "1" 이므로 "41"이 된다.
3 % 3 === 0 조건에서 true이므로 n = 3 / 3 - 1 값인 0이 되고
반복문이 종료되어 answer 값을 리턴한다.
문제를 풀 때 핵심은,
1. 3으로 나누었을 때 나머지가 1인 경우 1, 2인경우 2, 0인 경우 4로 변환되는 규칙을 찾는다.
2. 숫자 + 문자는 문자로 변환됨을 알아야 한다.
3. 나머지 값이 0일 경우 몫에서 1을 뺀 숫자를 n에 할당한다.
4. 아니라면 몫을 n에 할당한다.
function solution(n) {
let answer = "";
const arr = [4, 1, 2];
while (n) {
answer = arr[n % 3] + answer;
n = n % 3 === 0 ? n / 3 - 1 : Math.floor(n / 3);
}
return answer;
}