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