[Python] 백준 1105 진법 변환 2

BOJ 1105 진법 변환 2

문제

코드

n, base = list(map(int, input().split()))

digit = 0
num_dic = {
  10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F', 16: 'G', 17: 'H', 18: 'I', 19: 'J',
  20: 'K', 21: 'L', 22: 'M', 23: 'N', 24: 'O', 25: 'P', 26: 'Q', 27: 'R', 28: 'S', 29: 'T',
  30: 'U', 31: 'V', 32: 'W', 33: 'X', 34: 'Y', 35: 'Z'
}

while base**digit <= n:
  digit += 1

m = n
for i in range(1, digit+1):
  q, m = divmod(m, base**(digit-i))

  if q >= 10:
    print(num_dic[q], end='')
  else:
    print(q, end='')

앞자리 부터 구해야 한다고 생각해 자릿수를 while문으로 먼저 구한 뒤 맨 앞자리부터 마지막 자리까지 나머지로 구했다.

코드 수정

n, base = list(map(int, input().split()))
result = ''

while n > 0:
  if n % base >= 10:
    result += chr(n % base + ord('A') - 10)
  else:
    result += str(n % base)
  n //= base

print(result[::-1])

근데 굳이 앞자리부터가 아니더라도 마지막 자리부터 구한 뒤 역순으로 출력해도 가능하였다.
그래서 마지막 자리부터 나머지로 계산하였다.
base로 나눈 몫을 다시 base로 나누므로 굳이 base의 제곱수를 구하지 않아도 가능하다.

좋은 웹페이지 즐겨찾기