본문 바로가기
Algorithm Problem Solving/BaekJoon

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

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 18.
728x90
반응형

BaekJoon 백준 11005 진법 변환 2 문제는 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 문제이다. 문제를 풀기 위해서는 진수끼리의 변환, 진법 변환 방법과 알고리즘을 알아야 한다. python의 string 클래스를 사용했다. 난이도는 Bronze 1이다.

 

BaekJoon 11005 진법 변환 2 문제 정보

출처

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

난이도

- 브론즈 1 / Bronze 1

 

진법 변환 2 문제 요약

  • 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력한다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
  • 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
    • A: 10, B: 11,..., F: 15,..., Y: 34, Z: 35

 

문제 풀이 과정

  1. N이 B보다 클 동안 2~3 과정을 반복한다.
  2. N을 B로 나눈 나머지를 리스트에 저장하고
  3. N에 N // B을 저장한다.
  4. 나머지 리스트를 reverse() 함수를 사용하여 역순으로 바꾼다.
  5. 나머지가 10 이상이면 python string 클래스를 이용하여 문제 조건의 알파벳으로 바꿔준다.
    ▶ string.ascii_uppercase 반환 값 : 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  6. 리스트의 원소들을 map 함수를 사용하여 str 문자열로 바꿔 준 뒤, join 함수를 사용하여 한 줄로 출력한다.

 

코드 및 설명
  • rst [] - N을 B로 나눈 나머지 값
import string

N, B = map(int, input().split())
rst = []

while N >= B:
    rst.append(N % B)
    N = N // B
rst.append(N)
rst.reverse()

for i in range(len(rst)):
    if rst[i] >= 10:
        rst[i] = string.ascii_uppercase[rst[i] - 10]

print(''.join(map(str, rst)))

백준 런타임 에러 (TypeError)가 발생했는데, join 함수를 리스트에 적용하는데, 리스트에서 알파벳이 아닌 원소는 정수여서 일어난 타입 에러였다.

정수에는 join() 함수를 못 쓰므로 리스트의 원소들을 모두 문자열 str으로 바꿔주는 map 함수를 적용한 다음에 join을 해주었더니 해결되었다.

 

BaekJoon 백준 11005 진법 변환 2 문제를 파이썬 python 진법 변환 알고리즘으로 풀어보았다. 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글