February 07, 2021
프로그래머스의 월간 코드 챌린지 시즌 1
의 문제 3진법 뒤집기
이다. (링크)
난이도는 Level1으로 아주 쉬운 문제다. 풀고 나서 아주 간단한 풀이가 있다는 걸 알아서 남겨본다.
주어진 n에 대해 3진법으로 변환
→ 뒤집기
→ 10진법으로 표현
순으로 계산해야 한다.
메서드를 두 개를 만들었다.
toBaseThree
: 3진법으로 변환 및 뒤집기
const toBaseThree = (n) => {
let ret = ""
while(n!=0) {
ret += n%3
n /= 3
}
return ret
}
n을 3으로 나눈 나머지를 문자열 형태의 출력값으로 저장한다.
(문자열 앞에서부터 값이 추가되므로 3진법으로 변환한 값이 뒤집어져있다.)
toDecimal
: 10진법으로 변환
const toDecimal = (n) => {
let mul = 1
let dec = 0
while (n!=0) {
dec += (n%10) * mul
n /= 10
mul *= 3
}
return dec
}
solution
: n을 toBaseThree에 넣은 출력값을 toDecimal에 넣어서 리턴한다.
const solution = (n) => {
return toDecimal(toBaseThree(n), 3)
}
전체 코드
const toDecimal = (n) => {
let mul = 1
let dec = 0
while (n!=0) {
dec += (n%10) * mul
n /= 10
mul *= 3
}
return dec
}
const toBaseThree = (n) => {
let ret = ""
while(n!=0) {
ret += n%3
n /= 3
}
return ret
}
const solution = (n) => {
return toDecimal(toBaseThree(n), 3)
}
이렇게 메서드를 두 개를 만들어 풀었었지만, 더 간단하게 풀 수 있는 문제였다.
따로 메서드를 만들지 않고 기본적으로 자바스크립트에서 제공하는 메서드를 사용할 수 있다. parseInt와 toString을 사용하면 된다.
parseInt
parseInt(string, radix);
toString
n.toString(radix);
10진법의 n을
풀이 코드는 다음과 같다.
코드
const solution = (n) => {
return parseInt(n.toString(3).split("").reverse().join(""), 3)
}
자바스크립트 기초에 대한 공부의 필요성을 느끼게 되었다.
알고리즘 문제도 계속 풀어야겠다.