백준

[백준] 11005 : 진법 변환2 (Python/파이썬)

sson-coding 2025. 10. 4. 16:39

문제 링크

https://www.acmicpc.net/problem/11005

문제

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

출력

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

예제

입력

60466175 36

출력

ZZZZZ

정답 및 풀이

n,b = map(int,input().split())
result=[]
while n>0:
    remainder = n%b
    if remainder >=10:
        result.append(chr(ord('A')+remainder-10))
    else :
        result.append(str(remainder))
    n //= b
print(''.join(reversed(result)))
  1. n, b = map(int, input().split())
    • 입력을 공백 기준으로 잘라 두 개의 정수를 받음
  2. while n > 0:
    1. n 이 0이 될 때까지 반복
  3. remainder = n%b
    1. 나머지가 현재 자리수의 값이 됨
  4. if remainder >=10:
    1. 나머지가 10 이상일 때, A,B.. 로 바꿔야 함
  5. result.append(chr(ord('A')+remainder-10))
    1. 10 이면 A, …35면 Z
    2. chr() 로 다시 문자로 변환 후 리스트에 추가
  6. else :result.append(str(remainder))
    1. 나머지가 0~9 라면 그냥 문자열 숫자로 변환해서 리스트에 추가
  7. n //= b
    1. n 을 b 로 나눈 몫으로 갱신
  8. print(''.join(reversed(result)))
    1. 리스트는 뒤에서부터 쌓인 값이므로 순서를 뒤집음
    2. join 을 사용해 리스트를 하나의 문자열로 합쳐서 출력

새롭게 배운 내용 및 느낀점

  • reversed()
    • 리스트, 문자열, 튜플 를 거꾸로 순회할 수 있게 해줌
  • “”.join()
    • 리스트,문자열의 요소들을 하나의 문자열로 합쳐