[Programmers #68935] - 3진법 뒤집기

G_NooN·2024년 1월 24일
0

Algorithms

목록 보기
27/33
post-thumbnail

(Lv. 1) 3진법 뒤집기 (문제 링크)

문제 설명

자연수 n이 매개변수로 주어졌을 때, n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return하는 solution 함수를 완성하라.

제한 조건

  1. n는 1 이상, 100,000,000 이하인 자연수다.

입출력 예시


접근 방식

  1. 입력값 : 자연수(10진수) n / 출력값 : 3진법으로 뒤집고 10진수로 반환한 값
  2. n을 3진법으로 변환한다.
  3. n을 뒤집는다.
  4. n을 10진수로 변환한다.

해결 방법

  1. toString()을 사용하여 n을 진수가 변경된 문자열로 변환한다.
  2. split('').reverse().join('')을 사용하여 해당 값(문자열)을 뒤집는다.
  3. parseInt()을 사용하여 해당 값(문자열)을 10진수(숫자)로 변환한다.
  4. 값을 출력한다.

코드

function solution(n) {
  let answer = 0;
  const ternaryN = n.toString(3);
  const reverseTernaryN = ternaryN.split("").reverse().join("");

  answer = parseInt(reverseTernaryN, 3);

  return answer;
}

시행착오

초기 코드

function solution(n) {
  let answer = 0;
  const ternaryN = n.toString(3);
  const reverseTernaryN = String(ternaryN).split("").reverse().join("");

  answer = parseInt(Number(reverseTernaryN), 3);

  return answer;
}
  • 3진법으로 변환한 수를 뒤집기 위해 String().split('').reverse().join('')을 사용했다.
  • 뒤집은 수를 10진수로 변환하기 위해 parseInt(Number(reverseTernaryN), 3)을 사용했다.

toString()과 parseInt()

toString()

  1. toString()은 입력한 값을 문자열로 변환해주는 메서드다.
    따라서, 별도로 String()을 입력하지 않아도 문자열 형태가 된다.

  2. toString()의 매개변수에 숫자 값(2~36)을 입력하면, 해당 진수의 문자열로 자동 변환한다.
    숫자 값을 입력하지 않으면, 10(기본값)으로 설정된다.

parseInt()

  1. paresInt()는 입력한 문자열을 숫자로 변환해주는 메서드다.
    따라서, 별도로 Number()를 입력하지 않아도 숫자 형태가 된다.

  2. parseInt()의 매개변수에 숫자 값(2~36)을 입력하면, 해당 진수의 숫자값으로 자동 변환한다.
    숫자 값을 입력하지 않으면, 문자열의 형태에 따라 10진수 또는 16진수로 설정된다.

Number()의 한계

Number()를 사용하면 테스트를 통과하지 못했다.

  • 원인
    : Number()는 64비트 부동소수점 방식을 사용하기 때문에 소수점 아래 16자리까지만 정확하며, 그 이하의 숫자는 반올림하여 소수점 아래 17자리에 입력된다.
    따라서, 반올림 결과에 따라 소수점 아래 17자리의 숫자가 달라져 결과가 달라질 수 있다.

  • 해결 방법
    : Number()를 사용하지 않아도 parseInt()가 자동으로 문자열을 숫자로 변환해주기 때문에 Number()를 제거하였다.


주요 개념

  • toString(진수값)
  • parseInt(변경할 문자열, 진수값)
  • Number()의 표현 가능 범위
profile
쥐눈(Jin Hoon)

0개의 댓글