백준

[백준] 2745 : 진법 변환 (Python/파이썬)

sson-coding 2025. 10. 4. 16:34

문제 링크

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

문제

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

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

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

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

출력

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

예제

입력

ZZZZZ 36

출력

60466175

정답 및 풀이

n_dict = {str(i): i for i in range(10)}  # 0~9
n_dict.update({chr(ord('A') + i): 10 + i for i in range(26)})

n,b = input().split()
result = 0
for i in range(len(n)):
    result += n_dict[n[i]] * (int(b) ** (len(n)-i-1))
print(result)

  1. n_dict = {str(i): i for i in range(10)}
    1. 0~9 숫자를 키로, 정수값을 값으로 하는 딕셔너리 생성
  2. n_dict.update({chr(ord('A') + i): 10 + i for i in range(26)})
    1. 알파벳 A~Z를 10~35로 매핑
  3. n, b = input().split()
    1. 사용자 입력을 공백 기준으로 분리
  4. result = 0
    1. 10진수 결과를 저장할 변수 초기화
  5. for i in range(len(n)): result += n_dict[n[i]] * (int(b) ** (len(n)-i-1))
    1. 반복문으로 각 자리수 계산
    2. n_dict[n[i]] → 현재 자리수 10진수 값
    3. (int(b) ** (len(n)-i-1)) → 자리수 거듭제곱

새롭게 배운 내용 및 느낀점

진법 변환

다른 진법 → 10진수 변환

  • 예시: 1011₂ → 10진수
1×2³ + 0×2² + 1×2¹ + 1×2⁰
= 8 + 0 + 2 + 1
= 11₁₀

10진수 → 다른 진법

  1. 변환할 수를 진법 B로 나눔
  2. 나머지를 기록
  3. 몫이 0이 될 때까지 반복
  4. 나머지를 역순으로 읽기
  • 예시: 156₁₀ → 2진수
156 ÷ 2 = 78 ... 0
78 ÷ 2 = 39 ... 0
39 ÷ 2 = 19 ... 1
19 ÷ 2 = 9  ... 1
9 ÷ 2  = 4  ... 1
4 ÷ 2  = 2  ... 0
2 ÷ 2  = 1  ... 0
1 ÷ 2  = 0  ... 1
나머지 역순: 10011100₂