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