문제 링크
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)
- 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)})
- 알파벳 A~Z를 10~35로 매핑
- n, b = input().split()
- 사용자 입력을 공백 기준으로 분리
- result = 0
- 10진수 결과를 저장할 변수 초기화
- for i in range(len(n)): result += n_dict[n[i]] * (int(b) ** (len(n)-i-1))
- 반복문으로 각 자리수 계산
- n_dict[n[i]] → 현재 자리수 10진수 값
- (int(b) ** (len(n)-i-1)) → 자리수 거듭제곱
새롭게 배운 내용 및 느낀점
진법 변환
다른 진법 → 10진수 변환
- 예시: 1011₂ → 10진수
1×2³ + 0×2² + 1×2¹ + 1×2⁰
= 8 + 0 + 2 + 1
= 11₁₀
10진수 → 다른 진법
- 변환할 수를 진법 B로 나눔
- 나머지를 기록
- 몫이 0이 될 때까지 반복
- 나머지를 역순으로 읽기
- 예시: 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₂
'백준' 카테고리의 다른 글
| [백준] 2720 : 세탁소 사장 동혁 (Python/파이썬) (0) | 2025.10.10 |
|---|---|
| [백준] 11005 : 진법 변환2 (Python/파이썬) (0) | 2025.10.04 |
| [백준] 2563 : 색종이 (Python/파이썬) (0) | 2025.10.04 |
| [백준] 10798 : 세로 읽기 (Python/파이썬) (0) | 2025.10.04 |
| [백준] 2566 : 최댓값 (Python/파이썬) (0) | 2025.09.29 |