백준

2745번 | 진법변환 | 파이썬

정호나 2024. 8. 20. 15:16

📕 문제

 

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 

ZZZZZ 36

예제 출력 1 

60466175

 

36진법 수인 ZZZZZ를 10진법으로 변환하면 35*( 36^4 +36^3+36^2+36^1+36^0)= 60466175

📄 내가 생각한 풀이

1. b 진법, n 입력받기 

2. 진법 배열 만든다 arr=[0,1,2,3 ... Z]

3. len(n) 만큼 반복해서 아래 구함

arr의 인덱스 * (b^(len(n) -1) + b^(len(n) -2) + b^(len(n) -3 ...b^(len(n) -5))

 

💻 내 코드

num배열에 0~9,A-Z 를 모두 넣으니깐 백준에서 런타임에러 발생

아래처럼 수정 후 해결

n, b = input().split()
b = int(b)
num =[str(i) for i in range(10)] + [chr(i) for i in range(ord('A'), ord('Z') + 1)]

result = 0

print(reversed(n))

# 1의 자리부터 진법변환 이뤄지니 reversed함수로 거꾸로 루프 돌리기
for i, char in enumerate(reversed(n)):
    value = num.index(char)
    result += (value)*(b**i)
print(result)

 

☺️ 새로 알게 된 점

enumerate함수

for 대신 쓸 수 있는 파이썬 함수 -> 인덱스, 데이터 알 수 있음

 


루프를 돌리다보면 인덱스를 0이 아니라, 1로 시작하고 싶을 때가 있습니다. 이럴 때는 enumerate() 함수를 호출할 때 start 인자에 시작하고 싶은 숫자를 넘기면 됩니다.

>>> for i, letter in enumerate(['A', 'B', 'C'], start=1):
...     print(i, letter)
...
1 A
2 B
3 C
>>> for i, letter in enumerate(['A', 'B', 'C'], start=101):
...     print(i, letter)
...
101 A
102 B
103 C

 

제곱근 표현 : **

😉 참고

https://velog.io/@yje876/python백준-2745-진법-변환 

 

[python/백준] 2745: 진법 변환

진법변환 재밌다.

velog.io

 

 

'백준' 카테고리의 다른 글

2720번 / 세탁소 사장 동력 / 파이썬  (2) 2024.08.28
110005번 / 파이썬 / 진법 변환 2  (0) 2024.08.27
10789번 세로읽기 파이썬  (0) 2024.08.15
2675번 / 문자열 반복 / 파이썬  (0) 2024.08.10
백준 1000번 (A+B)  (0) 2024.07.30