0927_Algorithm_1003_피보나치함수
문제 : https://www.acmicpc.net/problem/1003
초기 구상과정
- 피보나치 재귀함수 호출과정 그려보자
- 관계성 따지면 문제 해결될듯
최종 코드
import sys
input = sys.stdin.readline
for tc in range(int(input())):
num = int(input())
dp = [(1, 0)] + [0] * num
if num >= 1:
dp[1] = (0, 1)
for i in range(2, num + 1):
dp[i] = (dp[i-1][0] + dp[i-2][0], dp[i-1][1] + dp[i-2][1])
print(dp[num][0], dp[num][1])
관계성 따지면서 그려보니 결국 재귀를 호출하는데 fibo(n-2) + fibo(n-1)을 호출하니 dp[n-2] + dp[n-1]이 되지 않겠나? 그래서 문제를 푸는데 간과할 뻔한 내용이 바로 1을 호출하는 경우. 이를 조건분기를 통해서 따로 해결하였다.
if num >= 1:
dp[1] = (0, 1)
느낀점
간과하지말자, 극단적 경우와 시작과 끝
Author And Source
이 문제에 관하여(0927_Algorithm_1003_피보나치함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lactea94/0927Algorithm1003피보나치함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)