본문 바로가기
Algorithm/DP

[백준] 10826번 : 피보나치 수 4 (파이썬)

by 이은선 2023. 12. 27.
728x90
SMALL

DP로 해결

https://www.acmicpc.net/problem/10826

 

10826번: 피보나치 수 4

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

 

(1) 처음 내 코드 (런타임 에러 - 실패)

# 피보나치 수4 (실버5) 
import sys
n = int(sys.stdin.readline())
dp = (n + 1) * [0]
dp[0] = 0
dp[1] = 1

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

 

문제의 입력을 잘 보면 n은 10000보다 작거나 같은 자연수 또는 0이다. 따라서 n이 0일때 크기가 1인 배열 [0] 하나가 생성되는데, dp[1]에 접근하려 했기 때문에 런타임에러가 난 것이다. 이처럼 문제를 풀 때 입력으로 들어오는 숫자 또한 잘 고려하며 풀어야 한다. 

 

(2) 수정 후 내 코드 (성공)

# 피보나치 수4 (실버5) 
import sys
n = int(sys.stdin.readline())
dp = (n + 1) * [0]
dp[0] = 0
if n != 0:
    dp[1] = 1

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

 

나는 n이 0일 때 예외처리를 하여 문제를 해결하였다. 하지만 이러한 예외적인 상황을 인지하지 못할 경우를 대비하여 처음부터 이러한 에러가 나는 걸 방지하기 위해선 애초에 dp = [0, 1] 로 dp 배열을 만들어놓고, 이후에 dp[i - 1] + dp[i - 2]한 값을 append하는식으로 짜면 될 것 같다. 문제를 한 번에 맞기 위해선 문제를 풀 때 예외처리 및 문제 접근법도 정말 중요한 것 같다.

728x90
LIST