구현/진법 변환

Q·2021년 9월 3일
0

알고리즘/백준

목록 보기
47/70

문제 설명


문제

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

input = sys.stdin.readline

n, b = input().split()

dic = {}
num = 10
for i in range(65, 91):
    dic[chr(i)] = num
    num += 1

n = list(n)
n.reverse()

result = 0
for i in range(len(n)):
    if n[i] in dic:
        result += (dic[n[i]]) * (int(b)**i)
    else:
        result += (int(n[i])) * (int(b)**i)

print(result)

해결 방법

A~Z까지의 수를 딕셔너리에 넣고 n의 원소가 딕셔너리에 있으면 그 원소를 result에 (dic[n의원소] b진법 ** 그 때의 인덱스) 를 해준다. 그게 아니라면 (n의원소 b진법 ** 그 때의 인덱스)를 해준다.

profile
Data Engineer

0개의 댓글