백준 2748번 런타임에러(IndexError)
프로그래밍/백준

백준 2748번 런타임에러(IndexError)

728x90
반응형

 

2748

 

 

2748번: 피보나치 수 2

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

www.acmicpc.net

 

이건 글 쓸 생각 없었는데 현타가 와서 글을 남긴다. 나같은 사람이 어딘가에 또 있을거라 생각하고 도움이 되고자한다.

DP로 간단하게 코드를 적고 제출버튼을 딱 눌렀더니 런타임에러가 떴다.

n=int(input())
dp=[0]*(n+1)
dp[1]=1
dp[2]=1
dp[3]=2

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

print(dp[n])

 

왜 일까 한참을 고민하고보니 3이하의 수를 입력했을때 에러가 발생함을 확인했다. 그 말은 즉 이런 소리다.

난 지금 dp[2], dp[3]까지 다 미리 정의해놨는데 만약 n=1이라면 dp[2]는 존재할까? 존재하지도 않는데 나는 dp[2]=1이라고 정의해두었다. 이로인해 발생하는 에러이다. 아래와 같이 하면 n의 정의가 90이하의 자연수이기 때문에 에러를 발생시키지 않는다.

n=int(input())
dp=[0]*(n+1)
dp[0]=0
dp[1]=1

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

print(dp[n])
728x90
반응형