🔗 Problem Link

 

2745번: 진법 변환

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

www.acmicpc.net


❔Thinking

  • 문자열로 주어지는 숫자 N을 앞에서 부터 차례대로 B진법에 맞게 변환한다.
  • B진법은 각 자리 숫자에 B를 곱하여 계산한다.

💻Solution

import sys
input = sys.stdin.readline

N, B = map(str, input().split())
B = int(B)
N = list(N)[::-1]
number = 0
for idx in range(len(N)):
    if N[idx].isalpha():
        number += (B ** idx) * (ord(N[idx])-55)
    else:
        number += (B ** idx) * int(N[idx])
print(number)

🗝️keypoint

  1. 진법은 (X진법 ** 숫자의 인덱스 번호)에 각 자리 숫자를 곱해서 계산한다.
  2. ord()를 통해 유니코드에 해당하는 숫자로 변환하고, 55를 빼서 'A'가 10이 될 수 있도록 한다.
    1. '0123456789AB....'로 해당 문자열을 인덱스로 표현하는 방법도 있다.
  3. list(N)[::-1]을 통해 진법 계산이 편하도록 순서를 뒤집는다. (sort는 리스트 순서를 정렬하므로 사용할 수 없다)

+ Recent posts