문제

코드
function solution(n) {
if(n < 3) return n;
const arr = [];
while(1) {
arr.push(n%3);
n = Math.floor(n/3);
if(n<3) {
arr.push(n);
break;
}
}
return arr.reverse()
.map((val, i) => val*(3**i))
.reduce((acc, cur) => acc+cur);
return parseInt(n.toString(3).split('').reverse().join(''), 3);
}
내가 푼 풀이
- 첫 줄인 if(n<3)을 안 넣으니 3보다 작은 수에서 오답이 나왔고, 추가하니 모두 정답이 되었다.
- string을 reverse하기 위해서는 split으로 배열 변환 후 reverse하여 join으로 합쳐야 한다.
toString(n)과 parseInt(,n)
- toString(n)의 n에 2~36 사이의 숫자를 넣으면 해당 진법에 맞게 변환된다.
- parseInt도 마찬가지로 parseInt('12414', n)에서 n에 2~36 사이 숫자를 넣으면 해당 진법에 맞게 변환된다.
- parseInt('110', 2) => 6
- parseInt('0xFkk) => 15(0x가 있으면 자동으로 16진법으로 인식. k는 16진법 벗어난 문자로 판단하여 F까지만 변환
참고 사이트