문제
풀이 코드
let triadNum = [];
function solution(n) {
let decimal = 0;
setTriad(n);
return triadNum
.map((num, index) => num * 3 ** index)
.reduce((sum, current) => sum + current, 0);
}
function setTriad(n) {
if (n >= 3) {
setTriad(n / 3);
setTriad(n % 3);
} else {
triadNum.push(Math.floor(n));
}
}
풀이 과정
42서울을 하며 진법변환을 위해 함수를 많이 만들었었다...
2진법, 16진법, 10진법 등등
그 아이디어가 생각나서 별도의 함수를 만들고 해당 함수에서 3진법으로 변환하게 하였다!
전역변수로 빈 배열을 선언한후, 해당 배열에 3진법으로 변환되는수 하나하나 추가했다
이후, map 함수를 통하여, 첫번째 인덱스부터 3 ** 0 , 3 ** 1 , ... 이렇게 된다 ( 문제에서 뒤집어 변환하기 라고 되어있다. )
처음에 요소를 뒤집었지만, 인덱스로 접근하면 굳이 뒤집지 않고 계산만 하면 된다고 생각이 들었다!!
그래서 reduce 함수로 각 요소를 더하여 해당 값을 반환하였다
근데 너무 코드가 지저분하다고 느껴졌다.
다른사람의 코드를 보고 경악을 금치 못했다
다른사람의 코드
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
이게 뭐지?
toString 함수로 진법 변환이 되는것도 신기한데
parseInt 함수를 이용해 진법 변환까지 가능하다
이래서 기초지식이 잘 파악되어야 한다
이부분은 나중에 다시 봐야겠다 특히 toString 과 parseInt 함수에 대해서