백준/DP
[dp/백준] 1309번: 동물원
ydin
2022. 6. 17. 00:06
-문제:https://www.acmicpc.net/problem/1309
처음에 n=1,2,3,4일 때 값을 3,7,15,38으로 구해서 점화식을 못 구했지만
다시 갯수 세보니 3,7,17,41이어서 f(n)= 2*f(n-1)+f(n-2)의 점화식을 구했다
답을 구한후 9901로 나눠줘야한다
-정답풀이 1:
n=int(input())
dp=[0 for _ in range(n+1)]
dp[0]=1
dp[1]=3
if n==1:
print(dp[1])
else:
for i in range(2,n+1):
dp[i]=(2*dp[i-1]+dp[i-2])%9901
print(dp[n])
-정답풀이 2:
n=int(input())
dp=[0 for _ in range(100001)]
dp[1]=3
dp[2]=7
for i in range(3,n+1):
dp[i]=(2*dp[i-1]+dp[i-2])%9901
print(dp[n])
이렇게 풀면 indexerror난다. n==1일 때는 dp=[0,0]으로 인덱스가 1까지 밖에 없는데, 네번째줄에 인덱스 2에 7을 넣기 때문에 indexError가 날 수 밖에 없다.
아래처럼 하고 싶다면 dp를 n+1개의 원소만 생성하는 것 대신, dp=[0]*100001로 초기화하고, dp[-1]이 아닌 dp[n]을 출력하면된다.
n=int(input())
dp=[0]*(n+1)
dp[1]=3
dp[2]=7
for i in range(3,n+1):
dp[i]=(2*dp[i-1]+dp[i-2])%9901
print(dp[-1])