진법 변환 문제 (백준 11005 문제)

2022. 1. 26. 06:07파이썬

코드


N, B = map(int,input().split())

tmp = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
answer = ''

while(N!=0):
  answer += str(tmp[N%B])
  N = N//B

print(answer[::-1])

풀이


N의 숫자를 B로 나누었을 때 나머지가 n번째 자리의 tmp의 index번호가 된다. 그리고 N을 나눈 수의 몫을 다시 B로 나누고 나머지를 구한다. N이 0이 될때까지 반복한다.

(n번째 자리란 나눈 횟수)

32라는 숫자를 16진법으로 표현하고 싶을 경우 우선 첫번째 나머지는 0이다. 그렇기 때문에 tmp의 인덱스 번호 0번째 숫자를 가져온다 '0'

몫은 2이다 16으로 나누어준다. 나머지는 2이다. tmp의 인덱스 번호 2번째 숫자를 가져온다. '2'

몫이 0이다. 루프를 종료한다.

answer에는 '02'가 저장되어 있다. 이것을 정확한 순서로 바꾸려면 거꾸로 돌려주어야 한다.  첫번째 자리부터 n번째 자리를 구하는 논리이기 때문에 계산해서 구한 순서대로 저장되어 있는 것이다.

 

반응형