[Python] 백준 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의 제곱수를 구하지 않아도 가능하다.
Author And Source
이 문제에 관하여([Python] 백준 1105 진법 변환 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@raaang/Python-백준-1105-진법-변환-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)