unction solution(n) {
let arr = [...n.toString(3)].reverse().join('')
return Number.parseInt(arr, 3)
}
n.toString(3) : 3진법으로 변환해줌
Number.parseInt(n, 3) : n은 3진법으로 되어있는데, 10진법으로 변환해줌.
바로 parseInt()안에 집어넣어도 되는구나
함수 사용없이 찐 원론적인 방법으로 품! 리스펙!!
function solution(n) {
const answer = [];
while(n !== 0) {
answer.unshift(n % 3);
n = Math.floor(n/3);
}
return answer.reduce((acc,v,i) => acc + (v * Math.pow(3, i)),0);
}
answer.unshift(n % 3);
n = Math.floor(n/3);
n은 3진법의 수 이므로 3으로 나누면 나머지로 맨끝자리수의 숫자가 순차적으로 나온다. 하지만 다음 줄에서 인덱스가 자리수 역할을 하기 때문에 역순으로 담지 않는다.(키포인트!)
(1234(천이백삼십사)를 10으로 나누어서 shift로 배열에 담으면 [1,2,3,4] 이렇게 일의 자리숫자 4부터 천의 자리 숫자 1까지 역순으로 나머지가 나오지만 인덱스 0인 1은 10의 0승 자리(1의자리), 인덱스 1인 2는 10의 1승 자리 (10의 자리, 인덱스 2인 3은 10의 2승(100의 자리)...이렇게 지수를 써먹기위해 역순(앞뒤반전)굳이 하지 않음)
nswer.reduce((acc,v,i) => acc + (v * Math.pow(3, i)),0)
Math.pow(밑, 지수)
배열arr의 인덱스가 곧 지수승임을 이용해 10진법 변환을 거듭제곱 .pow 함수로 풀었다.
([0,0,2,1]3진법 => 배열의 요소3^인덱스 :
03^0 + 03^1 + 23^2 + 1*3^3 )