Javascript 진법 변환하기 (프로그래머스 3진법 뒤집기)

프로그래머스 3진법 뒤집기 문제를 풀이한 후 메서드를 활용한 진법변환이 눈에 띄어 더 알아보았다!

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내가 시도한 방법

function solution(n) {
    let convertedNum = [];
    
    while(n > 0) {
        convertedNum.push(n % 3);
        n = Math.trunc(n / 3);
    }
    
    let answer = 0;
    for(let i = 0; i < convertedNum.length; i++) {
        answer += convertedNum[i] * (3 ** (convertedNum.length - i - 1));
    }
    
    return answer;
}

 

변환해야 하는 수를 3으로 나눠가며 몫과 나머지로 3진수 수를 구하고, 뒤집는 과정 없이 인덱스를 이용해 다시 10진수로 바꿔주었다.

 

 

Number.toString()으로 진법 변환하기 (10진수 -> n진수)

Number.toString()에 2~36 사이의 정수를 인자로 넘겨주면 그 수를 n진법으로 표현한 수를 String으로 반환한다.

예를들어 위 문제와같이 3진수로 변환하고 싶은 경우 (변환할 수).toString(3)과 같이 사용하면 된다.

매개변수 없이 사용하는 경우 10진수로 표현한 String을 반환한다.

즉, 1) Number를 String으로 변환해야할 때 2) 10진수를 다른 진법으로 표현된 수로 변환해야할 때 사용할 수 있다.

 

 

parseInt()로 진법 변환하기 (n진수 -> 10진수)

parseInt는 String을 Number로 변환하는 메서드다.

이때 parseInt(str, radix)의 형태로 두가지 인자를 넘겨주면 str의 진수를 설정하여 변환할 수 있다.

예를들어 2진수 "1010"을 10진수로 변환하고 싶다면, parseInt("1010", 2)와 같이 사용하면 된다.

메서드에게 변환할 수는 n진수야! 라고 알려주는 것이다.

즉, 1) String을 Number로 변환할 때, 2) n진수를 10진수로 변환해야할 때 사용할 수 있다.

 

메서드를 활용해 풀이하기

function solution(n) {
    return parseInt(n.toString(3).split("").reverse().join(""), 3);
}

 

문제 내용 그대로

1) 매개변수로 주어진 n을 3진수로 변환한뒤

2) 문자 순서를 뒤집어

3) 다시 10진수로 변환해주면 된다!

 

 

참고자료

MDN Number.prototype.toString()

 

Number.prototype.toString() - JavaScript | MDN

toString() 메서드는 특정한 Number 객체를 나타내는 문자열을 반환합니다.

developer.mozilla.org

 

MDN paseInt()

 

parseInt() - JavaScript | MDN

parseInt() 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환합니다.

developer.mozilla.org