본문 바로가기
백준

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

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

 

 

2745번: 진법 변환

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

www.acmicpc.net

 

1. 문제 설명

2. 풀이과정

해당 문제는 입력받은 진법의 수를 10진수로 변환하는 문제이다.

0부터 Z까지 총 36진법까지 존재하므로 해당 수를 리스트로 저장한다.

이는 입력받은 수를 정수로 표현한 값을 인덱스로 찾기 위함이다. 0 = 0, 1 = 1 ~ A = 10, B = 11

어떤 수를 10진수로 변환하려면 1의 자릿수부터 끝까지 반복하며 해당 진법의 0 제곱부터 자릿수 - 1 제곱까지 곱한 결과를 더해주면 된다.

ex) 1101 2진수 -> 1 * 2**3 + 1 * 2**2 + 0 * 2**1 + 1 * 2**0 = 13

 

  1. sys.stdin.readline() 함수를 사용하기 위해 sys 모듈을 불러온다. import sys
  2. 최대 36진법까지 존재하므로 각 진법별 숫자와 문자를 리스트에 저장한다. 우선 숫자 리스트부터 생성한다. 숫자는 정수형이 아닌 문자형으로 저장한다. num = list(str(i) for i in range(10))
  3. 문자는 A부터 Z까지 존재하므로 아스키코드로 해당 문자를 저장한다. alpha = list(chr(i) for i in range(65, 91))
  4. 만든 두 리스트를 하나의 리스트로 합쳐준다. li = num + alpha
  5. 수와 진법을 입력받는다. N, B = map(str, sys.stdin.readline().split())
  6. 모두 문자형으로 입력받았으므로 수는 각 문자를 분리해 리스트로 바꾸고 N = list(N)
  7. 진법은 정수형으로 바꾼다. B = int(B)
  8. 10진수로 바꾼 결과를 저장할 변수를 생성하고 초기화한다. result = 0
  9. 리스트로 저장한 수의 뒤쪽부터 불러와 for i in range(1, len(N) + 1)
  10. 해당 문자의 인덱스 값과 해당 진법을 통해 10진수로 바꾼 결과를 더한다. result += li.index(str(N[-i])) * (B ** (i - 1))
  11. 최종 변환한 10진수를 출력한다. print(result)
반응형

3. 소스코드

import sys

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

N, B = map(str, sys.stdin.readline().split())
N = list(N)
B = int(B)
result = 0
for i in range(1, len(N) + 1):
    result += li.index(str(N[-i])) * (B ** (i - 1))
    
print(result)
728x90
반응형