자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
n은 1 이상 100,000,000 이하인 자연수입니다.
직접 구현하는 방법!
10진수를 N으로 나눈 몫이 0이 될 때까지 계속 N으로 나눈다. N으로 나눌 때마다 그 나머지가 N진수의 자릿수가 된다. (작은 자릿수부터)
# n은 10진수, q는 N진수의 N (base)
def solution(n, q):
rev_base = ''
while n > 0:
# n을 q로 나눈 몫과 나머지
n, r = divmod(n, q)
rev_base += str(r)
# 큰 자릿수가 뒤에 붙게되므로
# 역순으로 뒤집어줘야 원하는 결과를 얻을 수 있다.
return rev_base[::-1]
function solution(n, q):
let rev_base = '';
while (n > 0) {
r = n % q;
n = parseInt(n / q);
rev_base += String(r);
}
// 자바스크립트에서는 문자열을 바로 뒤집을 수 없다.
return rev_base.split('').reverse().join('');
N진수를 뒷자릿수부터 세며 각 자릿수의 숫자만큼 N의 제곱수를 곱하여 더한다.
// n은 N진수
function solution(n) {
// n을 문자열로 변환 후 배열로 변환
let arr = Array.from(String(n));
let answer = 0;
arr.forEach((val, idx) => (answer += 3 ** idx * val));
return answer;
}
자바스크립트의 내장 메서드를 활용하여 간단하게 N진법 변환이 가능하다!
toString()
사용
10진수.toString(N); // N은 base
let decimal = 1023;
decimal.toString(2); // 2진수로
decimal.toString(8); // 8진수로
decimal.toString(16); // 16진수로
parseInt()
사용
parseInt(N진수, N); // N은 base
parseInt("1111", 2); // 2진수에서 10진수
parseInt("1777", 8); // 8진수에서 10진수
parseInt("3ff", 16); // 16진수에서 10진수
N진수에서 10진수로 변환 후, 다시 N진수로 변환
parseInt("1111", 2).toString(16); // 2진수에서 16진수로
function solution(n) {
// 10 -> 3
let three = ''
while (n > 0) {
r = n % 3
n = parseInt(n / 3)
three += String(r)
}
three = three.split('').reverse().join('')
// 3 -> 10
let arr = Array.from(three).map(Number)
let answer = 0
arr.forEach((val, idx) => (answer += 3 ** idx * val))
return answer
}
function solution(n) {
let answer = 0
n.toString(3)
.split('')
.map(Number)
.forEach((val, idx) => (answer += 3 ** idx * val))
return answer
}