10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
첫째 줄에 10진법 수 N을 B진법으로 출력한다.
60466175 36
ZZZZZ
n, b = map(int, input().split())
number = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
answer = ''
while n != 0:
answer += str(number[n % b])
n //= b
print(answer[::-1])
진법 나오는 문제는 어려워서 해설을 참고해서 풀어보았다.
일단 n, b 모두 정수이기 때문에 map 함수로 분리해주고, number에 10진법 넘어가는 상황까지 해결하기 위해서 담아주었다.
n(몫)이 0이 될때까지 while문으로 돌리고, n을 b로 나눈 값을 number에서 찾고 거꾸로 출력해서 읽으면 된다.
💡예제에서 n이 60466175인데, b인 36으로 나눈 몫이 35라서 Z가 나옴. 이 문제로 진법 문제를 조금이나마 이해할 수 있게 되었당. 어려워~~~