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 알고리즘에 대해 복습해볼 수 있었던 문제였다 :)