728x90
✏️ 문제
https://www.acmicpc.net/problem/2745
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
✏️ 풀이방법
- 257를 8진수로 변환하면 다음과 같이 계산한다.
1. 문자열 n의 문자 하나씩을 num에서 찾아 그에 해당하는 인덱스를 가져와서 담는 리스트(newn)를 생성
2. 진법으로 변환하는 제곱의 횟수가 하나씩 줄어드니까 -1씩 감소하는 for문으로 연산
📌 코드
n, b = input().split()
num = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
newn = []
binary = 0
for i in range(len(n)):
if n[i] in num:
newn.append(num.index(n[i]))
start = len(newn)-1
for i in range(start,-1,-1):
binary += newn[i]*(int(b)**(start-i))
print(binary)
📌 결과
#입력
ZZZZZ 36
#출력
60466175
🤔 시행착오.1
n, b = input().split()
num = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
for i in range(len(n)):
if n[i] in num:
n[i] = num.index(n[i])
print(n)
TypeError: 'str' object does not support item assignment
- 이 오류는 문자열 객체에 항목 할당이 지원되지 않는다는 에러
- 파이썬에서는 문자열은 불변(immutable)한 데이터 타입이기 때문에 일단 생성되면 변경할 수 없는데 반복문안에 조건문에서 값을 변경하려고 했기 때문에 문자열의 특정 인덱스에 값을 할당하려고 해서 발생한 에러
🤔 시행착오.2
n, b = input().split()
num = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
newn = []
binary = 0
for i in range(len(n)):
if n[i] in num:
newn.append(num.index(n[i]))
start = len(newn)-1
for i in range(start,-1,-1):
binary += newn[i]*(int(b)**(start-i))
print(binary)
- num리스트에 숫자형이랑 문자열이 함께 들어가 있어서 연산이 불가능
🔎 다른풀이
N, b = input().split()
ary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
N = N[::-1]
result = 0
for i,n in enumerate(N):
result += (int(b)**i)*(ary.index(n))
print(result)
-https://velog.io/@yje876
📝 메모
- enumerate에 대해 공부하기
'Python > online judge' 카테고리의 다른 글
백준 [3009.네 번째 점] | Python (0) | 2024.01.29 |
---|---|
백준 [1181.단어 정렬] | Python (0) | 2024.01.15 |
백준 [2750.수 정렬하기] | Python (0) | 2024.01.10 |
백준 [11653.소인수분해] | Python (0) | 2024.01.10 |
백준 [2581.소수] | Python (0) | 2024.01.10 |