백준 11005번 문제 바로가기

내 제출

num, base = map(int, input().split())

def convert(num, base):
  ref = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  q, r = divmod(num, base)

  return convert(q, base) + ref[r] if q else ref[r]

print(convert(num, base))

고수의 풀이

n,b=map(int,input().split())
r=''
while n>0:
  n,m=divmod(n,b)
  if m>9:m=chr(m+55)
  r+=str(m)
print(r[::-1])

CODE REVIEW

  1. divmod() 함수를 사용하면 몫(q)와 나머지(r)을 쉽게 구할 수 있다.
  2. 재귀함수를 이용해서 몫(q)이 존재하면 다시 convert()에 넣어서 n진법 각 자리를 찾아나간다.
  3. base을 거듭제곱해가면서 범위 설정하고 빼는 방식도 있겠지만, 매우 번거롭고 시간도 오래 걸린다.
  4. 고수의 풀이를 보면 chr() 함수를 볼 수 있는데, 이는 아스키코드 변환 함수로 ref 없이도 r에 해당하는 문자를 구할 수 있게 해준다.