https://programmers.co.kr/learn/courses/30/lessons/68935
자연수 n의 3진법 구하고, 앞 뒤로 반전시킨 후,
그 3진법을 다시 10진법으로 변환한 값 return
1. 재귀를 통해 n을 3진법으로 표현
2. 3진법으로 표현된 숫자를 반전시키기
3. 3진법 -> 10진법 숫자로 변환
function solution(n) {
let answer = 0, number = "", digit = 0;
function DFS(n) {
if (n === 0) return;
else {
DFS(parseInt(n / 3));
number += String(n % 3);
}
}
DFS(n);
number.split('').reverse().join('');
for (let i of number) {
answer += (i * (Math.pow(3, digit)));
digit++;
}
return answer;
}
Math.pow( )는 안 써봤는데 문제 풀면서 새롭게 알 수 있었다.
코드짤 때 사용한 나머지 함수들은 내 기준...자주 쓰는데도 계속 까먹고 헷갈리는 함수들이라
문제가 어렵진 않았지만 다시 상기시켜줘서 좋았던 것 같다..ㅠㅠ
(1) 풀이 1
function solution(n) {
const answer = [];
while(n !== 0) {
answer.unshift(n % 3); // n % 3 값을 배열의 앞으로 추가하여 3진법을 만듦.
n = Math.floor(n/3);
}
return answer.reduce((acc,v,i) => acc + (v * Math.pow(3, i)),0);
}
진법 변환 시, 배열의 unshift( )를 활용하여 3진법으로 변환한 것과
나처럼 자리를 나타내는 digit 변수를 따로 만들지 않고도,
reduce함수를 써서 i를 활용한 계산이 인상적이다.
(1) 풀이 2
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
toString에 진법 변환,
parseInt에 특정 진수의 정수로 변환하는 기능이 있는 걸 처음 알았다..ㅇㅅㅇ