백준 11005번을 풀어보았다.
2745번이 N진법 수를 10진법 수로 변환하는 유형이었다면,
11005번은 10진법 수를 N진법 수로 변환하는 유형이다.
각각을 변환하는 과정을 수학적으로 나타내면 다음과 같다.
11005번은 크게 두 가지 풀이로 정리할 수 있다.
- 수학적 풀이
- toString 메소드
1. 수학적 풀이
아래 두 풀이의 근본적인 접근은 동일하다.
다만 1-2번은 수학적 풀이를 그대로 표현하고 1-1번은 수학적 풀이를 조금 풀어서 표현하였다.
1-1.
let [N, B] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number)
let exponent = 0
while (N >= B ** exponent) {
exponent++
}
let number = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
let output = ''
for (let i = exponent - 1; i >= 0; i--) {
output += number[Math.floor(N/(B**i))]
N -= (B ** i) * Math.floor(N/(B**i))
}
console.log(output)
1-2.
let [N, B] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number)
let number = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
let output = ''
while (N > 0) {
let remainder = N % B
let quotient = Math.floor(N/B)
output += number[remainder]
N = quotient
}
console.log(output.split('').reverse().join(''))
2. toString 메소드
let [N, B] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number)
let output = N.toString(B).toUpperCase()
console.log(output)
toString 메소드는 숫자를 문자열로 변환하는 기능뿐만 아니라 10진법을 n진법으로 변환하는 기능을 수행하며
이 중 진법 변환 기능을 사용하여 문제를 해결할 수 있다.
💫 이 문제를 통해 배운 것
toString 메소드는 10진법을 n진법으로 변환할 수 있다.