728x90
🔗 Problem Link
❔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
- 진법은 (X진법 ** 숫자의 인덱스 번호)에 각 자리 숫자를 곱해서 계산한다.
- ord()를 통해 유니코드에 해당하는 숫자로 변환하고, 55를 빼서 'A'가 10이 될 수 있도록 한다.
- '0123456789AB....'로 해당 문자열을 인덱스로 표현하는 방법도 있다.
- list(N)[::-1]을 통해 진법 계산이 편하도록 순서를 뒤집는다. (sort는 리스트 순서를 정렬하므로 사용할 수 없다)
'코딩테스트 > Python' 카테고리의 다른 글
[Baekjoon] 24267. 알고리즘 수업 - 알고리즘의 수행 시간 6 (0) | 2024.03.04 |
---|---|
[Baekjoon] 2720. 세탁소 사장 동혁 (0) | 2024.03.01 |
[LeetCode] 55. Jump Game (0) | 2023.12.04 |
[LeetCode] 189. Rotate Array (1) | 2023.11.28 |
[Baekjoon] 1167. 트리의 지름 (1) | 2023.10.27 |