(작성중) 2745: 진법 변환 - Python

beaver.zip·2023년 12월 4일
0

baekjoon

목록 보기
47/56
post-custom-banner

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진법으로 출력한다.

예제 입출력


풀이 1 (정답)

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)

형 변환, 인덱스 실수가 있어서 오류가 몇 번 발생했고, 금방 찾아 고쳐서 제출에 성공했다.

풀이 2 (정답, comprehension)


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

profile
mv blog velog.io/@beaver_zip
post-custom-banner

0개의 댓글