본문 바로가기
Algorithm/Baekjoon

진법 관련 유형

by minhi 2025. 1. 9.

백준 2745번, 11005번에서 진법을 변환하는 유형을 풀어보았다.

 

관련 내용을 한 번에 정리해보고자 한다.

 

진법을 변환하는 방법은 크게 두 가지로 구분할 수 있다.

  • 수학적 풀이
  • 메소드 사용

 

1. 수학적 풀이

 

N진법을 10진법으로 변환하는 방법과 10진법을 N진법으로 변환하는 방법을 수학적으로 나타내면 다음과 같다.

 

 

N진법을 10진법으로 변환하는 유형

let [N, B] = require('fs').readFileSync('/dev/stdin').toString().split(' ')

B = Number(B)

N = N.split('').reverse()

let decimal = 0

let number = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for (let i = 0; i < N.length; i++) {
  let value = number.indexOf(N[i])

  decimal += value * Math.pow(B, i)
}

console.log(decimal)

 

10진법을 N진법으로 변환하는 유형

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. 메소드 사용

 

N진법을 10진법으로 변환하는 유형

 

parseInt 메소드를 사용하면 N진법을 10진법으로 변환할 수 있다.

praseInt(string, radix)
  • string: 정수형 숫자로 변환하고자 하는 문자열 값
  • radix: string의 진수 값 (optional)

parseInt 메소드는 radix진수 string10진수 정수형 숫자로 변환한 값을 반환한다.

 

radix가 없을 경우 일반적으로 string을 10진수로 해석하지만, 0, 0x 등 특정 접두사에 의해 혼란이 발생할 수 있다.

let [N, B] = require('fs').readFileSync('/dev/stdin').toString().split(' ')

B = Number(B)

let decimal = parseInt(N, B)

console.log(decimal)

 

10진법을 N진법으로 변환하는 유형

 

toString 메소드를 사용하면 10진법을 N진법으로 변환할 수 있다.

 

이때, 기본적으로 Object.prototype.toString()은 매개변수 없이 단순히 문자열 변환 기능을 수행하지만,

 

이를 재정의한 Object를 상속받은 객체의 경우 선택적으로 매개변수를 취할 수 있다.

 

예를 들어 Number.prototype.toString(), BigInt.prototype.toString()이 있다.

toString(radix)
  • radix: 변환하고자 하는 진수 값 (optional)

toString 메소드는 10진수 숫자radix진수 string으로 변환한 값을 반환한다.

let [N, B] = require('fs').readFileSync('/dev/stdin').toString().split(' ').map(Number)

let output = N.toString(B).toUpperCase()

console.log(output)

 

참고) 백준 2745번백준 11005번

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 2720번  (0) 2025.01.10
백준 2903번  (1) 2025.01.09
백준 11005번  (0) 2025.01.09
백준 2745번  (0) 2025.01.02
백준 2563번  (2) 2025.01.02