백준 문제 풀다가 처음으로 메모리 초과가 떴다. 생소한 에러라 질문글을 참고해 해결해보았다.
먼저 첫 제출 코드
import sys
N, B = sys.stdin.readline().split()
decimal = 0
for i in range(len(N)):
try:
int(N[len(N)-1-i])
decimal += N[len(N)-1-i] * pow(int(B), i)
except:
decimal += (ord(N[len(N)-1-i])-55) * pow(int(B), i)
print(decimal)
int(N[len(N)-1-i]) 한다고 N[len(N)-1-i]에 int형으로 변환된 값이 저장되는 건 아닌데 순간 착각했나보다.
따라서 메모리 초과는 차치하더라도, 올바른 연산을 위해서
decimal += N[len(N)-1-i] * pow(int(B), i)를 decimal += int(N[len(N)-1-i]) * pow(int(B), i)로 수정해주어야 한다.
이렇게 수정했더니 메모리 초과까지 해결되었다.
그렇다면 여기서 궁금증 두 가지
1. 처음에 왜 int(N[len(N)-1-i]) 안 했는데도 정수 연산이 제대로 되었지?
2. 메모리 초과는 왜 발생한 거고 왜 해결된 거지?