본문 바로가기

Programming/Python

[Baekjoon/Python] 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진법으로 출력한다.

 

 

내 제출

import sys
import math
N, B = sys.stdin.readline().split()

dic = {"A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15, "G": 16, "H": 17, "I": 18, "J": 19, "K": 20, "L": 21, "M": 22, "N": 23, "O": 24, "P": 25, "Q": 26, "R": 27, "S": 28, "T": 29, "U": 30, "V": 31, "W": 32, "X": 33, "Y": 34, "Z": 35}


b = int(B)
arr = []
for i in reversed(N):
    try:
        arr.append(int(dic[i]))
    except KeyError:
        arr.append(int(i))

sum = 0
for i in range(len(N)):
    sum += math.pow(b, i) * arr[i]

print(int(sum))

 

 

다른 코드

n, b = input().split()
print(int(n, int(b)))
  • int(a, b): a를 b진법으로 해석하여 10진수로 반환함
  • 또 나만 수학과스러움.
N, B = input().split()

e=1
f=0

for i in N[::-1]:
    try:
    	n = int(i) # 각 자릿수 i를 정수 n으로 변환
    except:
    	n = ord(i) - 55   # i가 문자인 경우, ASCII 코드에서 'A'부터 시작하여 문자에 대응하는 숫자로 변환 후 - 55
    
    f += n * e
    e *= int(B)

print(f)
  • ord(): 문자를 해당하는 아스키값으로 변환하는 함수