다른 사람의 코드를 구경하다가, 새로운 사실을 3가지씩이나 알게되었다.
JavaScript의 toString()에는 놀라운 기능이 있는데, toString()의 인자로 숫자를 넣어주면, 그 수의 기수(radix)를 반환한다.
JavaScript를 사용하면서 문자열을 반전시키고 싶을 때는 reverse()를 사용하면 되는데, 이 메소드는 배열에서 동작하므로 split("")을 사용하여 분리를 먼저 해주면 된다.
JavaScript의 parseInt()는 toString()과 동일하게 인자를 사용하여 radix값을 반환받을 수 있다.
이 지식을 토대로 문제의 순서대로 코드를 풀면 된다.
1. 입력받은 수를 toString(3)
2. split("")
3. reverse()
4. 배열이므로 join("") -> 참고로 join()은 배열 사이에 쉼표가 들어가게된다.
5. parseInt( , 3)
개선되지 않은 코드
let str = '';
function make3(n){ // 3진법 계산 함수
if(n<3){
str = str+String(n);
return;
}
else{
str = str + String(n%3)
make3(parseInt(n/3));
}
}
function make10(str){ // 10진법 계산 함수
let num = 0;
for(let i=(str.length-1); i>=0; i--){
let p = str.length-i-1;
if(p == 0) num += Number(str[i])
else{
let n = Math.pow(3, str.length-i-1)
num += Number(n* str[i])
}
}
return num;
}
function solution(n) {
make3(n);
return make10(str);
}
function solution(n){
return parseInt(n.toString(3).split("").reverse().join(''), 3)
}
저렇게 긴 코드를 한 줄로 줄일 수 있다니 무척 놀랍다.