HJW's IT Blog

[BOJ][Python]1003: 피보나치 함수 본문

Algorithm

[BOJ][Python]1003: 피보나치 함수

kiki1875 2023. 4. 1. 21:13

문제 정의

이 문제는 피보나치 수열을 재귀적으로 계산하는 함수를 구현하는 문제이다.

재귀 함수만을 이용하여 문제를 풀었을 경우 시간 제한이 있기에 풀 수 없다.

그렇기에 메모이제이션 기법을 통해 문제를 풀었다.

 

메모이제이션 

  • 이전에 계산한 값을 저장하여 다시 계산하지 않도록 하는 다이나믹 프로그래밍

 

# 테스트 케이스 개수
T = int(input())

# 메모이제이션을 위한 리스트
memo = [[0, 0] for _ in range(41)]
memo[0], memo[1] = [1, 0], [0, 1]

# 피보나치 수열을 계산하는 함수
def fibonacci(n):
    # 이미 계산된 값이면 메모이제이션된 값을 반환
    if memo[n] != [0, 0]:
        return memo[n]
    
    # 메모이제이션을 위해 이전 값들을 가져옴
    memo[n-1] = fibonacci(n-1)
    memo[n-2] = fibonacci(n-2)
    
    # n번째 값을 계산하고 메모이제이션
    memo[n] = [memo[n-1][0] + memo[n-2][0], memo[n-1][1] + memo[n-2][1]]
    return memo[n]

# 각 테스트 케이스마다 결과 출력
for _ in range(T):
    n = int(input())
    result = fibonacci(n)
    print(result[0], result[1])