
오늘은 프로그래머스 월간 코드 챌린지 시즌1 문제인 3진법 뒤집기를 풀어보았다.
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후,
이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
문제를 보자마자 떠오른 방법은 단순하게 10진수 -> 3진수 -> 10진수 순서대로 변환하는 것이었다.
reverse()를 사용내가 짠 코드
function solution(n) {
var answer = 0;
let three = [];
// 3진수로 변환
while (n >= 3) {
three.push(n % 3);
n = parseInt(n / 3);
}
three.push(n); // 마지막 남은 몫도 추가
// 10진수로 변환
for (let i = 0; i < three.length; i++) {
answer += three[i] * (3 ** (three.length - i - 1));
}
return answer;
}
배열(three)에 넣었다.reverse()로 뒤집으려 했으나 역순 저장돼서 생략하였다.3 ** (자리의 위치)로 곱하고 모두 더해 10진수로 변환해주었다.이렇게 단계별로 해결했다. 내가 짠 코드는 기본적인 원리를 직접 구현했지만 다른 사람의 풀이를 보니 훨씬 간단하게 작성한 걸 깨달았다.
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
이 코드는 내가 몰랐던 parseInt와 toString 의 기능을 활용한 간단한 풀이였다.
toString()으로 10진수를 3진수 문자열로 변환parseInt()로 10진수 변환
toString()으로 숫자를 쉽게 진수 변환할 수 있다는 점
number.toString(radix)는 간단하게 원하는 진수로 변환할 수 있었다.
parseInt()로 문자열을 10진수로 변환할 수 있다!
parseInt(string, radix)를 활용하면 다양한 진수 변환 문제를 간단히 해결할 수 있을 것 같다.