1. n을 3진법으로 바꾸는 과정에서 배열 안에 (3진법으로 변환한) 각 숫자를 넣는다.
1-1. 나머지 변수(remain)를 let으로 선언한 후 while 문을 돌려서 나머지 변수에 n % 3을 할당한다.
1-2. 이후 while문 안에서 n이 0이나 1, 2가 될 때까지 나누고 소수점은 버린다.
1-3. 나머지 변수(remain)를 배열에 push한다.
1-4. n이 계속 나눠져서 0이나 1, 2가 될 경우 배열에 0이나 1, 2가 된 값을 push한 후 while문을 빠져나온다.
2. 배열에서 각 숫자를 꺼내서 10진법으로 계산한다.
2-1. for문을 돌려서 배열의 i번째 요소가 맨 마지막 요소라면 -> 그냥 answer에 더하고,
2-2. 배열의 i번째 요소가 맨 마지막 요소가 아니라면 -> 3의 제곱을 곱한 후 answer에 더한다.
function solution(n) {
const arr3 = [];
let remain;
while (n >= 0) {
remain = n % 3;
n = Math.floor(n / 3);
arr3.push(remain);
if (n === (0 || 1 || 2)) {
arr3.push(n);
break;
}
}
let answer = 0;
for (let i = 0; i < arr3.length; i++) {
if (i !== arr3.length - 1) {
answer += +arr3[i] * 3 ** (arr3.length - 1 - i);
} else {
answer += arr3[arr3.length - 1];
}
}
return answer;
}
function solution(n) {
const arr3 = [];
while( n > 0){
const remain = n % 3
n = Math.floor(n / 3)
arr3.push(remain)
}
let answer = 0;
for(let i = 0; i < arr3.length; i++){
const idx = arr3.length - 1 - i;
answer += +arr3[i] * (3 ** idx)
}
return answer
}
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
Number.toString()
메서드가 number 타입을 string 타입으로 바꿔주는 걸로만 알고 있었는데, 진법을 표현할 수 있었다..! parseInt()
도 숫자로 변환만 해주는 메소드인 줄 알았는데, 얘도 진법 지정이 가능했다.