Algorithm/DP

[백준 1003번] 피보나치 함수

킹우현 2023. 3. 13. 14:33

import sys
input = sys.stdin.readline

def fibo(n):

    if n == 0:
        print(1,0)
        return None
    if n == 1:
        print(0,1)
        return None

    dp = [[0]*2 for _ in range(n+1)]

    dp[0][0], dp[0][1] = 1,0
    dp[1][0], dp[1][1] = 0,1

    for i in range(2,n+1):
        dp[i][0] = dp[i-1][0] + dp[i-2][0]
        dp[i][1] = dp[i-1][1] + dp[i-2][1]
    
    print(dp[n][0],dp[n][1])

t = int(input())

testcase = [0]*t

for i in range(t):
    testcase[i] = int(input())

for i in testcase:
    fibo(i)

이번 문제는 피보나치 수를 구하는 함수에서, fibo(0)과 fibo(1)이 각각 출력되는 횟수를 구하는 문제이다.

 

여태까지 풀었던 피보나치 문제와 동일하게 Bottom-Up 방식을 사용하여 푸는 대신, DP 테이블을 피보나치 수를 저장하는 1차원 리스트가 아니라 0과 1이 호출되는 횟수를 저장하는 2차원 리스트를 활용하였다는 차이점이 있다.

 

다시 한번 DP 알고리즘에 대해 복습해볼 수 있었던 문제였다 :)

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

[백준 1912번] 연속합  (0) 2023.03.14
[백준 11726번] 2xn 타일링  (0) 2023.03.14
[백준 2775번] 부녀회장이 될테야  (0) 2023.03.13
[백준 9095번] 1, 2, 3 더하기  (0) 2023.03.10
[백준 2156번] 포도주 시식  (0) 2023.03.08