https://www.acmicpc.net/problem/2745
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진법으로 출력한다.
N, B = input().split()
alpha_dict = {}
N_list = []
result = 0
for i in range(65, 91):
alpha_dict[chr(i)] = i-55
for n in N:
if n.isalpha():
N_list.append(alpha_dict[n])
else:
N_list.append(int(n))
for j in range(len(N)):
result += (N_list[j] * (int(B)**(len(N)-j-1)))
print(result)
코드가 좀 난잡하다.
내가 생각한 방식은
1. N = ZZZZZ ~> N_list = ['Z','Z','Z','Z','Z']
2. N_list = ['Z','Z','Z','Z','Z'] ~> [35, 35, 35, 35, 35]
3. for i in range (len(N)): result += N_list(i) * B**(len-i)
형 변환, 인덱스 실수가 있어서 오류가 몇 번 발생했고, 금방 찾아 고쳐서 제출에 성공했다.
N, B = input().split()
result = 0
alpha_dict = {chr(i): i-55 for i in range(65, 91)}
N_list = [
alpha_dict[n] if n.isalpha() else int(n)
for n in N
]
for j in range(len(N)):
result += (N_list[j] * (int(B) ** (len(N)-j-1)))
print(result)
alpha_dict에 dictionary comprehension을 적용했다. (참고)
# dictionary comprehension
{key : value for key in range(1, 10)}
N_list에 삼항 연산을 적용했다. (참고)
list comprehension에서 if-else문을 사용하려면 삼항 연산을 사용하여야 한다.
list = [
X if X > 0 else X < 0
for x in X
]
https://velog.io/@yje876/python%EB%B0%B1%EC%A4%80-2745-%EC%A7%84%EB%B2%95-%EB%B3%80%ED%99%98