자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
- 제한조건
- n은 1 이상 100,000,000 이하인 자연수입니다.
- Example
- 입출력 예 #1
- 입출력 예 #2
function solution(n) {
let tmp = [];
let answer = 0;
while(parseInt(n / 3) >= 1) {
tmp.push(n % 3);
n = parseInt(n / 3);
}
tmp.push(n);
tmp.reverse();
for(let i = 0; i < tmp.length; i++) {
answer += tmp[i] * (3 ** i);
}
return answer;
}
⭐POINT : 3진법 변환
- 해당 숫자가 더이상 나누어질 수 없을 때까지 3으로 나누며, 그 나머지들을 저장해주면 된다.
- 예제와 같이 n이 45일 때, 3진법으로 변환하면 1200이 된다.
📍 풀이과정
let tmp = []; let answer = 0;
- 자연수 n을 3으로 나누었을의 나머지를 저장하기 위해 tmp 선언
- 3진법을 다시 10진법으로 표현한 수를 더해주기 위해 answer 선언
while(parseInt(n / 3) >= 1) { tmp.push(n % 3); n = parseInt(n / 3); }
- n을 3으로 계속 나누어주며 그 나머지를 tmp에 저장
- n의 값은 n/3한 값으로 계속 바꾸어주어야 한다 (⭐POINT : 3진법 변환 참고)
tmp.push(n); tmp.reverse();
- n이 0이 아닌 1이될 때까지만 반복문을 진행했으므로 마지막에 1을 더해주어야함
- 1200이 아닌 0021 순으로 저장이 되었기 때문에 1200순으로 바꿔주기
for(let i = 0; i < tmp.length; i++) { answer += tmp[i] * (3 ** i); }
- 자연수 n을 3진법으로 바꾼 값을 다시 10진법으로 바꿔주기
3진법 변환, 10진법 변환하는 원리를 정확히 알 수 있었다.