본문 바로가기

Algorithm & SQL/Baekjoon

[Algorithm] [Python] 백준/BOJ - 11005 _ 진법 변환 2

진법 변환 2


INDEX


문제 설명


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


제출 코드


from sys import stdin

tmp = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

n, b = map(int, stdin.readline().split())
answer = ''

while n != 0:
    answer += str(tmp[n % b])
    n = n // b

print(answer[::-1])

코드 설명


문제는 간단하다.

진법 변환의 핵심만 파악하면 된다.

간단한 예시로 362라는 10진수 숫자를 생각해보자. 362를 10으로 나누면 몫은 36이며 나머지값은 2다, 2는 10진수에서 2번째 숫자를 의미한다.

해당 숫자를 정답에 추가한다.

이후 위에서 구한 몫 36을 10으로 나누면 몫은 3이되며 나머지는 6이 된다. 6을 정답에 추가한다.

이와 같이 반복하다보면 결과는 263이 된다. 우리는 맨 끝자리에 대응될 값부터 구했기 때문에 답이 뒤집어져있다.

이를 거꾸로 변환해주면 진법 변환이 완료된다.