Algorithm/Baekjoon

백준 11005번

minhi 2025. 1. 9. 10:21

백준 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진법으로 변환할 수 있다.