[프로그래머스] 3진법 뒤집기

프로그래머스의 월간 코드 챌린지 시즌 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진법으로 변환한 값이 뒤집어져있다.)

  • 전체를 3으로 나눈다.

toDecimal : 10진법으로 변환

  • 3진법으로 변환 및 뒤집어진 값을 10진법으로 변환한다.
const toDecimal = (n) => {
    let mul = 1
    let dec = 0
    while (n!=0) {
        dec += (n%10) * mul
        n /= 10
        mul *= 3
    }
    return dec
}
  • 뒷자리부터 숫자 하나씩 떼서 1, 3, 9… 으로 곱한 후 반환할 값에 더해준다.

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);
  • radix : 2와 36 사이의 진수

진법의 string을 10진법으로 나타낸다.

toString

n.toString(radix); 
  • radix : 2와 36 사이의 진수

10진법의 n을 진법으로 나타낸다.

풀이 코드는 다음과 같다.

코드

const solution = (n) => {
    return parseInt(n.toString(3).split("").reverse().join(""), 3)
}

글을 마치며

자바스크립트 기초에 대한 공부의 필요성을 느끼게 되었다.

알고리즘 문제도 계속 풀어야겠다.


Written by@jaeeun
I explain with words and code. I explain with words and code. I explain with words and code.