문제풀이/수학

[Python/파이썬] 백준 2745번 진법 변환

딜레이레이 2023. 2. 4. 22:41
 

2745번: 진법 변환

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 

www.acmicpc.net

문제

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진법으로 출력한다.



코드

n, b = input().split()  # b진법 수 n
b = int(b)

num_dict = {chr(65+i):10+i for i in range(26)}

ans = 0
n = n[::-1]
for i in range(len(n)):
    if n[i].isalpha():  
        ans += num_dict[n[i]] * (b ** i)
    else:
        ans += int(n[i]) * (b ** i)
print(ans)

 

문자열을 뒤집지 않고 하려면 다음과 같이 하면 된다.

 

n, b = input().split()  # b진법 수 n
b = int(b)

num_dict = {chr(65+i):10+i for i in range(26)}

ans = 0
l = len(n)
for i in range(l):
    if n[i].isalpha():  
        ans += num_dict[n[i]] * (b ** (l-i-1))
    else:
        ans += int(n[i]) * (b ** (l-i-1))
print(ans)

 

  • 파이썬의 int 함수 이용
n, b = input().split()  # b진법 수 n
b = int(b)

print(int(n, b))

파이썬의 int 함수는 2번째 인자로 몇진법인지 넣으면 1번째 인자로 받은 문자열에 대해 10진수로 변환하여 리턴해준다.