[JavaScript] toString(), parseInt() 을 이용한 진수 변환

Hannahhh·2023년 8월 30일
0

JavaScript

목록 보기
46/47

프로그래머스 코딩 테스트 연습 중, 자연수 n이 매개변수로 주어졌을 때, 자연수 n을 3진법으로 변환 -> 역으로 뒤집은 후 -> 10진법으로 표현하는 문제가 있었다.

아래는 처음 문제풀이 시 작성한 코드이다.

const ternary = (n) => { // 자연수n을 3진법으로 표현하는 함수
    let ternary_num = [];
    while(n >= 1){
        ternary_num.push(n % 3);
        n = Math.floor(n/3);
    }
    return ternary_num;
}

function solution(n) {
    let answer = 0;
    const re_ternary = ternary(n).reverse(); // 3진법으로 표현한 함수를 거쳐 역으로 전환
    return re_ternary.reduce((acc,cur,idx)=> acc + cur * Math.pow(3,idx),0) // 3진수->10진수로 변환
}

아래는 toString()을 적용해 자연수 n(10진수)을 3진수로, 역으로 배치된 3진수를 parseInt()를 적용해 다시 10진수로 변환하는 코드이다.

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

parseInt(), toString()는 문자열->정수, 정수->문자열로 표현할 때뿐만 아니라 진수 변환 시 사용한다는 말을 듣긴했는데 사용 예시를 본 건 처음이라 정리해둘 필요성을 느꼈다.

parseInt(string)
parseInt(string, radix)

console.log(parseInt('123'));
// 123 (default base-10)
console.log(parseInt('123', 10));
// 123 (10진수 전환=그대로)
console.log(parseInt('   123 '));
// 123 (공백 무시)
console.log(parseInt('077'));
// 77 (정수로 전환될 때, 맨 앞의 0무시)
console.log(parseInt('1.9'));
// 1 (소수점 생략)
console.log(parseInt('ff', 16));
// 255 (16진수-> 10진수로 변환)
console.log(parseInt('0xFF', 16));
// 255 (앞에 0x가 붙은 16진수-> 10진수로 변환)
console.log(parseInt('xyz'));
// NaN (정수로 변환할 수 없는 input이 들어왔을 때-> NaN)
let baseTenInt = 10;
console.log(baseTenInt.toString(2));
// 2진수 전환 -> "1010"이 출력됩니다
console.log(baseTenInt.toString(3));
// 3진수 전환 -> "101"

toString(), parseInt() 메서드를 이용해 한 줄로 깔끔하게 풀 수 있다니.. 이래서 메서드를 잘 알아두면 좋구나..

Reference:
MDN: parseInt()
MDN: obj.toString()

0개의 댓글