본문 바로가기
Algorithm/Baekjoon

백준 2745번

by minhi 2024. 7. 6.

백준 2745번

 

백준 문제 풀다가 처음으로 메모리 초과가 떴다. 생소한 에러라 질문글을 참고해 해결해보았다.

 

먼저 첫 제출 코드

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. 메모리 초과는 왜 발생한 거고 왜 해결된 거지?

 

 

 

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 2941번  (0) 2024.07.10
백준 2581번  (0) 2024.07.09
백준 2869번  (0) 2024.07.09
백준 2563번  (0) 2024.07.06
백준 10988번  (0) 2024.07.04