
아래 백준 로고를 클릭하면 해당 문제로 이동합니다 😀
이전 게시글 예시와 비슷하게 만약 입력으로 17325410 36이 들어왔다고 가정해보자.
진법 변환은 다음과 같이 할 수 있다.
| N | 몫 | 나머지 |
|---|---|---|
| 17325410 | 481261 | 14 |
| 481261 | 13368 | 13 |
| 13368 | 371 | 12 |
| 371 | 10 | 11 |
위 표에서 몫이 B보다 작은 경우부터 나머지를 거꾸로 읽어주면 10, 11, 12, 13, 14가 된다.
따라서 ABCDE를 찾아낼 수 있다.
코드는 우선 0~Z까지 있는 문자열을 만들었다.
이 문자열의 인덱스를 이용하면 A를 10으로, Z를 35로 바꿔줄 수 있다.
후에 while문을 통해 입력받은 N을 B로 계속 나누고, 그때의 나머지값을 저장한다.
이때 주의해야할 점은 나머지가 위에서부터 들어간다는 점이다 !
while문 조건은 True를 사용했고 대신에 안에 if문을 이용해 몫이 b보다 작아졌으면 그때의 몫을 결과값에 추가하게 했다. 위에 표 예시로는 10이 마지막에 추가가 된것이다.
num = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
n, b = map(int, input().split())
result = []
while True:
if n < b:
result.append(n)
break
result.append(n % b)
n //= b
result.reverse()
for i in result:
print(num[i], end = '')
