자연수 n이 매개변수로 주어진다. n을 3진법 상에서 앞뒤로 뒤집은 후,
이를 다시 10진법으로 표현한 수를 return하도록 solution 함수를 완성하세요.
입출력 예
n | result |
---|---|
45 | 7 |
125 | 229 |
입출력 예 설명
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
45 | 1200 | 0021 | 7 |
125 | 11122 | 22111 | 229 |
10진수를 3진수로 바꾸기 위해선 다음과 같은 과정이 필요하다.
N | Q = N / 3 | R = N % 3 |
---|---|---|
45 | 15 | 0 |
15 | 5 | 0 |
5 | 1 | 2 |
1 | 0 | 1 |
이후 나온 1200을 뒤집어 0021을 다시 10진수로 변환하기 위해선 아래의 식이 필요하다.
0 * 3³ + 0 * 3² + 2 * 3¹ + 1 = 7
각 자리의 수를 3⁰부터 3ⁿ⁻¹ (n은 배열의 길이) 까지 곱한 결과를 모두 더한다.
그러면 거꾸로 뒤집은 상태에서 10진법으로 변환한 것과 같아진다.
function solution(n) {
const answer = [];
while (n !== 0) {
answer.unshift(n % 3); // 배열의 맨 앞에 나머지를 추가해서 별도로 배열을 뒤집어주지 않음
n = Math.floor(n / 3);
}
// reduce를 활용하여 각 자리수에 맞게 곱해준다.
return answer.reduce((acc, v, i) => acc + v * Math.pow(3, i), 0);
}
function solution(n) {
return parseInt(...n.toString(3)].reverse().join(""), 3);
}
Number.toString([N진수])
: 숫자를 입력한 진수로 변환한 string을 반환한다. 진수를 생략하면 10진수로 변환한다.Number.parseInt(string, [N진수])
: string을 N진수에서 1정수(10진수)로 계산한 값을 반환한다.