Algorithm/백준
[알고리즘]백준 2745번: 진법 변환
Im_light.J
2023. 2. 21. 14:30
728x90
알고리즘 유형: 수학
문제
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진법으로 출력한다.
풀이
10을 넘어가는 숫자는 10진법 내에서 표기가 안되므로 알파벳을 사용해서 입력을 받습니다
각 숫자 혹은 알파벳이 10진법에서 어떤 숫자를 의미하는지 저장해둘 딕셔너리를 하나 만들어두겠습니다.
알파벳을 하나하나 타이핑해도 되지만, string모듈의 ascill_uppercase를 활용하겠습니다
print(ascill_uppercase)를 해주면 ABC.....XYZ와 같은 문자열이 출력됩니다.
import sys
from string import ascii_uppercase
letters={}
for i,letter in enumerate(ascii_uppercase):
letters[letter]= i+10
for i, num in enumerate([i for i in range(0,10)]):
letters[str(num)]=i
nums , notation = sys.stdin.readline().strip().split()
notation = int(notation)
answer= 0
for i,num in enumerate(nums[::-1]):
answer+=(notation**i)*letters[num]
print(answer)
728x90