📕 문제
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 |