문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출력
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
내 제출
import sys
import math
N, B = sys.stdin.readline().split()
dic = {"A": 10, "B": 11, "C": 12, "D": 13, "E": 14, "F": 15, "G": 16, "H": 17, "I": 18, "J": 19, "K": 20, "L": 21, "M": 22, "N": 23, "O": 24, "P": 25, "Q": 26, "R": 27, "S": 28, "T": 29, "U": 30, "V": 31, "W": 32, "X": 33, "Y": 34, "Z": 35}
b = int(B)
arr = []
for i in reversed(N):
try:
arr.append(int(dic[i]))
except KeyError:
arr.append(int(i))
sum = 0
for i in range(len(N)):
sum += math.pow(b, i) * arr[i]
print(int(sum))

다른 코드
n, b = input().split()
print(int(n, int(b)))
- int(a, b): a를 b진법으로 해석하여 10진수로 반환함
또 나만 수학과스러움.
N, B = input().split()
e=1
f=0
for i in N[::-1]:
try:
n = int(i) # 각 자릿수 i를 정수 n으로 변환
except:
n = ord(i) - 55 # i가 문자인 경우, ASCII 코드에서 'A'부터 시작하여 문자에 대응하는 숫자로 변환 후 - 55
f += n * e
e *= int(B)
print(f)
- ord(): 문자를 해당하는 아스키값으로 변환하는 함수
'Programming > Python' 카테고리의 다른 글
| [Baekjoon/Python] 2720 세탁소 사장 동혁 (0) | 2024.06.29 |
|---|---|
| [Baekjoon/Python] 11005 진법 변환 2 (0) | 2024.06.27 |
| [Baekjoon/Python] 2563 색종이 (0) | 2024.06.18 |
| [Baekjoon/Python] 2738 행렬 덧셈 (0) | 2024.06.11 |
| [Baekjoon/Python] 25206 너의 평점은 (1) | 2024.06.11 |