본문 바로가기

두두의 알고리즘/문제

[진법변환] 백준 2745번 '진법 변환' (Python)

728x90

<문제 링크>

https://www.acmicpc.net/problem/2745

 

2745번: 진법 변환

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

www.acmicpc.net


<문제 풀이>

  1. 진법 변환하는 법을 알고 있어야 함
  2. 파이썬 내장 함수가 없는 진법이므로 진법 함수를 새로 만들어준다.
  3. 각 자릿수를 곱할 수 있게 자릿수를 만들어 줌

<코드>

'''
ZZZZZ 36
'''

import sys
input_data = sys.stdin.read().rsplit()

N = input_data[0]
B = int(input_data[1])

arr = []
mult = 1
sum_= 0
arr.append(1)

for i in range(len(N)-1):
    mult *= B
    arr.append(mult)

def switch(c):
    return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'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}[c]

for x,y in zip(N[::-1],arr):
    sum_ += switch(x)*y

print(sum_)

 

<고쳐야 할 점>

  • 진법 계산을 좀 더 편리하게 하기 위해서 ** 연산을 기억하자!