알고리즘/다시 풀어 보기

백준 BRONZE 2 [2745번] 진법 변환 {언어 : Python} [실수 주의]

스위태니 2025. 2. 25. 08:27
728x90

문제 링크

https://www.acmicpc.net/problem/2745

메모리 초과 코드

n, b = input().split()
b = int(b)
length = len(n)
c = length - 1
answer = 0
dp = [1] * length
for i in range(1, length):
    dp[i] = dp[i-1] * b
for i in range(length):
    ni = n[i]
    if ni.isdigit():
        answer += ni * dp[c-i]
    else:
        answer += (ord(ni) - 55) * dp[c-i]
print(answer)

정답 코드

n, b = input().split()
b = int(b)
answer = 0

for char in n:
    if char.isdigit():
        answer = answer * b + int(char)
    else:
        answer = answer * b + (ord(char) - 55)

print(answer)

풀이 방법

  • 메모리가 초과된 이유는 숫자를 int로 바꾸는 작업을 하지 않아서였다.
  • ni가 isdigit일 때 int로 바꾸면 40ms가 걸린다.

느낀점

  • 실수를 주의하자.
  • 기존 변수에 형변환을 여러 번 시도하면 메모리 초과가 난다.