본문 바로가기
JavaScript

[프로그래머스 Lv.1] 3진법 뒤집기 풀이

by 어느새벽 2024. 10. 28.
function solution(n) {
    //n을 3진법으로 바꿔
    let ternary = n.toString(3);
    //3진법이 된걸 뒤집어 reverse
    let reversTernary = ternary.split("").reverse();
    let sum = reversTernary.join("")
    //reverse를 다시 10진법으로 바꿔
    let answer = parseInt(sum, 3)
    return answer;
}

 

코드 설명

  1. 3진법 변환: n.toString(3)를 사용하여 10진수 n을 3진법 문자열로 변환합니다.
  2. 문자열 뒤집기: split("") 메서드를 사용하여 문자열을 문자 배열로 변환한 후, reverse()로 배열을 뒤집습니다.
  3. 배열을 문자열로 합치기: join("")을 사용하여 다시 문자열로 만듭니다.
  4. 10진수로 변환: parseInt(sum, 3)를 통해 뒤집어진 3진법 문자열을 10진수로 변환합니다.
  5. 결과 반환: 최종 결과를 반환합니다.

toString()과 parseInt() 메서드가 객체의 타입에 따라 기능이 다르다는 것을 이번에 알게 되었다. 

아래는 객체의 타입에 따른 각각의 기능 설명이다.


1. toString 메서드

  • 용도: 숫자를 특정 진법의 문자열로 변환합니다.
  • 구문: num.toString(radix)
    • 여기서 num은 변환할 숫자이고, radix는 변환할 진법 (2진법, 8진법, 10진법, 16진법 등)입니다.
  • 원리:
    • 이 메서드는 주어진 숫자를 해당 진법으로 표현하기 위해 나눗셈과 나머지 계산을 반복하여 각 자리를 결정합니다.
    • 예를 들어, 10진수 15를 3진법으로 변환할 때:
      1. 15 ÷ 3 = 5, 나머지 0 (가장 오른쪽 자리)
      2. 5 ÷ 3 = 1, 나머지 2
      3. 1 ÷ 3 = 0, 나머지 1
    • 따라서, 3진법으로는 "120"이 됩니다 (가장 오른쪽 자리부터).

2. parseInt 메서드

  • 용도: 문자열을 특정 진법의 숫자로 변환합니다.
  • 구문: parseInt(string, radix)
    • 여기서 string은 변환할 문자열이고, radix는 해당 문자열의 진법입니다.
  • 원리:
    • 이 메서드는 문자열의 각 자리수를 해당 진법의 값으로 변환하여 10진수로 합산합니다.
    • 예를 들어, "120" (3진법 문자열)을 10진법으로 변환할 때:
      1. 1 × 323^2 = 9 (첫 번째 자리)
      2. 2 × 313^1 = 6 (두 번째 자리)
      3. 0 × 303^0 = 0 (세 번째 자리)
    • 따라서, "120"은 9 + 6 + 0 = 15 (10진법)입니다.

요약

  • Number 객체는 Object 객체의 toString()메소드를 오버라이딩하며, Object.prototype.toString() 를 상속받지 않습니다. Number 객체에서 toString() 메소드는 특정 진수로 객체를 표현한 문자열을 환원합니다.
  • Number.parseInt() 정적 메서드는 문자열 인자를 구문 분석하여 지정된 진법 또는 기수의 정수를 반환합니다.