Algorithm/DP
[백준] 10826번 : 피보나치 수 4 (파이썬)
_은선_
2023. 12. 27. 05:47
728x90
SMALL
DP로 해결
https://www.acmicpc.net/problem/10826
(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