junyub2   2년 전

import sys
n = int(sys.stdin.readline())

def fibonacci(n):
    dp = [0 for x in range(n + 1)]
    for i in range(n+1):
        if i == 0:
            dp[i] = [0]
        elif i == 1:
            dp[i] = [1]
        else:
            dp[i] = dp[i-2] + dp[i-1]
    return dp

for i in range(n):
    s = int(sys.stdin.readline().rstrip())
    if (0 <= s) and (s <= 40):
        print(fibonacci(s)[-1].count(0), fibonacci(s)[-1].count(1))

recoma   2년 전

i == 0, i == 1에서 dp[i]에 리스트를 생성하고 else에서 dp[i-2], dp[i-1]를 합친 새로운 리스트를 dp[i]에 생성하려고 하고 있습니다.

따라서 dp[i]의 리스트 길이가 피보나치 수대로 증가하여 메모리가 초과된 것으로 보입니다.

junyub2   2년 전

아 dp[i]가 길이가 계속 길어진다는거는 알았는데 거기서 메모리가 초과가 될수 있다는거는 생각을 못했네요

감사합니다

댓글을 작성하려면 로그인해야 합니다.