문제링크
문제
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진법으로 출력한다.
예제입력
ZZZZZ 36
예제출력
60466175
풀이
예제에서는 36진법이지만 문제자체는 N진법 이기때문에 몇진법이 입력될지는 알 수 없습니다. 이번 풀이에서는 문제의 예제입력에 나와있는 36진법을 사용하여 설명을 드리겠습니다.
일단 입력에는 N(진법 수)와 B(진법)가 있습니다.
예제의 입력에서는 36진법 ZZZZZ 진법수가 사용되었는데 36진법에서는 0~35까지의 수가 있는데 여기서 10부터 35까지의 값을 나타낼때, 알파벳 A부터 Z까지 사용합니다. 따라서 36진법에서 10은 'A'를 나타내고, 35는 'Z'를 나타냅니다.
print(int, '변환문자열',변환진수)
파이썬에서 N진법수로 변환하려면 간단히 int함수를 활용하면됩니다. 이걸 활용하여 N진법수와 B진법을 입력받아 적용시킬 수 있습니다.
N,B = input().split()
print(int(N,int(B)))
N과 B를 입력받은후 int함수를 활용하여 진법수N 문자열을 B진법으로 변환하여 결과를 출력해줍니다.
예제에서 입력된 ZZZZZ 36를 똑같이 입력해보면 '60466175'라는 값이 출력됩니다.
궁금증
그럼 여기에서 이런생각도 해볼 수 있습니다. Z가 35이면 Z가 5개니깐 '3535353535'문자열도 36진수로 변환하면 같은 값이 나올까?? 결과를 확인해보면 '319031585889665'라는 다른값이 출력됩니다.
이렇게 나오는 이유는 앞서 말씀했듯이 36진법에서는 10부터 35까지는 알파벳을 사용합니다. 따라서 위와같이 입력했을때 36진법에서는 '35'가 아닌 '3','5'로 인식하게됩니다.