다이나믹 프로그래밍의 조건
1. problem이 sub-problem으로 쪼개질 때.
2. sub-problem으로 problem을 구할 수 있을 때.
3. sub-problem이 겹칠 때.(값을 보관해서 중복을 없앤다.)
2 × n의 모형에 대해서 생각해본다.
아래와 같은 모형으로 표현할 수 있다.
다이나믹 프로그래밍이므로 점화식으로 생각을 해야한다.
1×2, 2×1 타일로 채우는 방법의 수를 직접 구해보고 규칙을 알아보자.
2x1: 1회 / 2x2: 2회 / 2x3: 3회 / 2x4: 5회
규칙을 보면 피보나치 형식인 것을 알 수 있다.
f(n) = f(n-1) + f(n-2)
4의 횟수 = 3의 횟수 + 2의 횟수
5의 횟수 = 4의 횟수 + 3의 횟수
n = int(input())
arr = [0, 1, 2]
for i in range(3, n+1):
arr.append(arr[i-1] + arr[i-2])
print(arr[n] % 10007)
arr = [0, 1, 2]
for i in range(3, n+1):
arr.append(arr[i-1] + arr[i-2])