(Lv. 1) 3진법 뒤집기 (문제 링크)
자연수 n이 매개변수로 주어졌을 때, n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return하는 solution 함수를 완성하라.
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;
}
String().split('').reverse().join('')
을 사용했다.parseInt(Number(reverseTernaryN), 3)
을 사용했다.toString()은 입력한 값을 문자열로 변환해주는 메서드다.
따라서, 별도로 String()을 입력하지 않아도 문자열 형태가 된다.
toString()의 매개변수에 숫자 값(2~36)을 입력하면, 해당 진수의 문자열로 자동 변환한다.
숫자 값을 입력하지 않으면, 10(기본값)으로 설정된다.
paresInt()는 입력한 문자열을 숫자로 변환해주는 메서드다.
따라서, 별도로 Number()를 입력하지 않아도 숫자 형태가 된다.
parseInt()의 매개변수에 숫자 값(2~36)을 입력하면, 해당 진수의 숫자값으로 자동 변환한다.
숫자 값을 입력하지 않으면, 문자열의 형태에 따라 10진수 또는 16진수로 설정된다.
Number()를 사용하면 테스트를 통과하지 못했다.
원인
: Number()는 64비트 부동소수점 방식
을 사용하기 때문에 소수점 아래 16자리까지만 정확하며, 그 이하의 숫자는 반올림하여 소수점 아래 17자리에 입력된다.
따라서, 반올림 결과에 따라 소수점 아래 17자리의 숫자가 달라져 결과가 달라질 수 있다.
해결 방법
: Number()를 사용하지 않아도 parseInt()가 자동으로 문자열을 숫자로 변환해주기 때문에 Number()를 제거하였다.