본문 바로가기
백준

[백준] 11005번 : 진법 변환 2 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 10. 14.
728x90
반응형

 

 

11005번: 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 10진법 수를 원하는 진법의 수로 바꾸는 문제이다.

우선 각 진법별 수를 0~9까지, A~Z까지 한 리스트에 저장한다.

10진법 수를 원하는 진법의 수로 나눈 나머지의 값을 인덱스 값으로 갖는 해당 문자를 저장하며 진법을 바꾼다.

이때 바꾼 결과는 거꾸로 저장되어 있기 때문에 최종 결과를 뒤집어 준다.

나머지를 추가한 뒤에는 해당 수를 진법 수로 나눈 몫의 결과로 새로 저장하며 0이 될 때까지 반복한다.

ex) 8을 2진법으로 바꾸면 8 % 2 = 0, 4 % 2 = 0, 2 % 2 = 0, 1 % 2 = 1로 리스트에는 0001로 저장된다. 이를 뒤집어 줘야 한다.

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 0~9, A~Z까지의 리스트를 각각 만들어 하나의 리스트로 합친다. 이때 숫자도 모두 문자형으로 저장하여 나중에 결과를 출력하기 용이하게 만든다. li = list(str(i) for i in range(10)) + list(chr(i) for i in range(65, 91))
  3. 10진법 수와 바꿀 진법을 입력받는다. N, B = map(int, sys.stdin.readline().split())
  4. 바꾼 진법의 결과를 저장할 리스트를 생성하고 result = list()
  5. 10진법 수가 0이 될 때까지 반복하며 while (N != 0)
  6. 해당 수를 바꿀 진법으로 나눈 나머지에 해당하는 값을 추가한다. result.append(li[N % B])
  7. 해당 수를 진법으로 나눈 몫의 결과로 새로 저장한다. N //= B
  8. 바꿀 진법의 결과를 구했다면 이는 거꾸로 저장되어 있기에 뒤집어 준다. result.reverse()
  9. 해당 결과를 하나의 문자열로 만들어 출력한다. print(''.join(result))
반응형

3. 소스코드

import sys

li = list(str(i) for i in range(10)) + list(chr(i) for i in range(65, 91))

N, B = map(int, sys.stdin.readline().split())
result = list()
while (N != 0):
    result.append(li[N % B])
    N //= B
    
result.reverse()
print(''.join(result))

 

728x90
반응형