레벨 1 문제인 "3진법 뒤집기"를 풀다가 javascript의 진법 다루는 방법을 잘 모른다는 것을 깨달았다.
이 글을 통해 정리하고자 한다.
수학을 통해 직접 계산해서 진법을 표현하는 방법도 있지만, 실제 알고리즘 테스트에서 쉽고 빠르게 사용할 수 있는 메서드 위주로 정리하고자한다
Number.toString(N진수)
숫자를 N진수로 변환한 문자열을 반환한다.
const num = 5;
num.toString(2); // '101'
5.toString(2) // (X) 자료형의 메서드이기 때문에 숫자에서 메서드를 호출 할 수 없다
parseInt(문자열,문자열의 진수)
| N진법 문자열을 10진수로 변환한다
parseInt(10, 4); // 4
parseInt(12, 3); // 5
parseInt(11, 11); // 5
문제 요구사항을 단계별로 나누어 생각해보자
10진법 n을 3진법으로 만들기위해 toString()
을 이용한다
n.toString(3)
그리고 뒤집기 위해서 배열 메서드인 reverse()
를 사용한다.
toString()의 반환값은 문자열이기 때문에, 문자열을 배열로 변환하기 위해 스프레드 연산자를 사용한다
[...n.toString(3)].reverse()
뒤집은 배열을 join("")을 이용해 다시 문자열로 만들어 준다
[...n.toString(3)].reverse().join("")
이제 10진법으로 바꿔주면 된다. N진법의 수를 10진법으로 바꾸기 위해서는 parseInt()를 사용한다
function solution(n){
return parseInt([...n.toString(3)].reverse().join(""),3)
}