Post

06. Python(진법 변환)

06. Python(진법 변환)

[toc]

진법 변환

문제

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


제출

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from string import ascii_uppercase

a, b = map(str, input().split())
A_list = list(a)
A_list.reverse()

alp_dic = {}
for i in ascii_uppercase:
    alp_dic[i] = ord(i) - 55

rst = 0
for i in range(len(A_list)):
    if A_list[i] in alp_dic:
        rst += alp_dic[A_list[i]] * (int(b) ** i)
    else:
        rst += int(A_list[i]) * (int(b) ** i) 
print(rst)
1
2
ZZZZZ 36
60466175

인사이트

1
2
a, b = map(str, input().split())
print(int(a, int(b)))
1
2
ZZZZZ 36
60466175
  • int(x, base)의 개념을 잊고 있었음
  • base는 x값이 몇 진수인지 정의하는 인자이며, 0 그리고 2부터 36까지의 값을 가짐
  • base가 정의되었다면 x는 반드시 n진수로 표현 가능한 string, bytes, bytearray값으로 정의해야 함
  • base가 정의되었다면 x를 숫자 형으로 정의할 수 없음
  • base의 기본값은 10이고 사용할 때는 대부분 생략(흔히 아는 int(a)의 형태)
    • Int(‘10’) => 10으로 나오는 이유는 base가 0 일 때 문자열을 그대로 정수로 변환하기 때문
    • 실제로 int(‘10’, 0)