function solution(n) {
const array = ['4', '1', '2'];
let answer = '';
while(n) {
answer = array[n % 3] + answer;
n = (n % 3 === 0)? parseInt(n / 3) - 1 : parseInt(n / 3);
}
return answer;
}
3 * n번째의 숫자를 변환하는 과정에서 규칙 찾는데서 오래 걸렸다.
기본적으로 숫자 n을 3으로 나눴을 때 나머지가 1이나 2로 나누어 떨어지면 1, 2가 되고 나머지가 0인 경우에는 4가 된다.
따라서 나머지에 0, 1, 2 index에 맞춰 ['4', '1', '2']
array를 만들어준다.
3 * n번째의 숫자가 아닌 경우에는 숫자 n을 0이 될 때 까지 계속해서 3으로 나누면서 나머지에 해당하는 array[3으로 나눈 나머지] + answer를 넣어주면 되지만 3 * n번째의 숫자(3으로 나눴을 때 나머지가 0인 경우)에는 다음 숫자 n을 3으로 나눈 몫 - 1로 대입해주어야 한다.
예를 들어 n이 3일때는 3으로 나눴을 때 나머지가 0 이므로 첫번째 반복시 answer = array[0] + answer;
이 되고 그리고 n = (3 / 3) - 1
이므로 0이 된다.
n이 6인 경우에는 첫번째 반복시 answer = array[0] + answer;
이고 다음 n에 대입될 값은 n = (6/3) - 1
이므로 1이 된다.
두번째 반복시에 앞에서 n이 1이 되서 들어왔으므로 answer = array[1] + '4';
이므로 최종 answer값은 14가 된다.
'Algorithm > 문제풀이' 카테고리의 다른 글
Programmers - 문자열 압축 / Javascript (1) | 2021.02.17 |
---|---|
Programmers - 크레인 인형뽑기 게임 / Javascript (0) | 2021.02.14 |
Programmers - 단어변환 / Javascript (0) | 2021.01.14 |
Programmers - 카펫 / Javascript (0) | 2021.01.11 |
Programmers - 모의고사 / Javascript (0) | 2021.01.11 |