김재호

[백준] 진법변환2 (11005) 본문

코딩테스트

[백준] 진법변환2 (11005)

Kimjaeho 2026. 2. 12. 23:48

https://www.acmicpc.net/problem/11005

문제

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

 

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

출력

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

예제 입력 1 

60466175 36

예제 출력 1 

ZZZZZ

  • N : 변환할 10진수 정수
  • B : 변환할 진법(2~36 범위에서 사용)
  • arr : 나머지 값(0~35)을 문자로 바꾸기 위한 테이블 문자열
    • arr[0] = '0', arr[10] = 'A', arr[35] = 'Z' 처럼 매핑됨
  • s : 변환 과정에서 만들어지는 진법 결과를 누적할 문자열(단, 뒤집힌 순서로 쌓임)

while N: 반복문을 통해 N이 0이 될 때까지 계속 진법 변환을 수행한다.

  1. N % B를 계산하여, 현재 자리의 값을 구한다.
  • 진법 변환에서 “나머지”는 항상 가장 낮은 자리(1의 자리부터) 를 의미한다.
  1. arr[N % B]를 이용해 나머지 값을 문자로 변환한 뒤 s에 붙인다.
  • 이때 낮은 자리부터 붙기 때문에 결과가 거꾸로 쌓인다.
  1. N //= B를 수행하여 N을 B로 나눈 몫으로 갱신한다.
  • 다음 자리 계산을 위해 N을 줄이는 과정이며, 반복하면 결국 N이 0이 되어 종료된다.

마지막으로 s[::-1]로 문자열을 뒤집어 올바른 자리 순서로 출력한다.

  • 나머지부터 쌓았기 때문에 뒤집는 과정이 필요하다.

※ 2진수 / 8진수 / 16진수 변환 (내장 함수)

  • bin(n) : 10진수 정수 n → 2진수 문자열 ('0b' 접두어 포함)
  • oct(n) : 10진수 정수 n → 8진수 문자열 ('0o' 접두어 포함)
  • hex(n) : 10진수 정수 n → 16진수 문자열 ('0x' 접두어 포함)

문자열 진법 → 10진수” 변환 (내장 함수)

  • int(string, base) : base진법 문자열을 10진수 정수로 변환
    • base는 2~36 지원

'코딩테스트' 카테고리의 다른 글

프로그래머스 SQL  (0) 2026.02.21
프로그래머스 SQL  (0) 2026.02.21
[백준] 최댓값(python)  (2) 2025.07.24
[백준] 25206번 너의 평점은(python)  (1) 2025.07.21
[백준] 2908번 상수(python)  (0) 2025.06.28