코테 공부/프로그래머스
[Python/DP] 11727 2xn 타일링2(점화식 찾기 어려움)
prefer_all
2022. 8. 9. 19:13
문제
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×17 직사각형을 채운 한가지 예이다.

입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
예시 입력 | 예시 출력 |
2 | 3 |
8 | 171 |
12 | 2731 |
풀이
1. 패턴 찾기(어려웠음. 각 경우를 수식화하려기보다 전의 경우와의 관계파악)
2. DP 문제임을 확인
- 어떤 항을 구하기 위한 전 항들을 완벽히 구할 수 있고, 그 항들을 이용하여 정의에 맞는 현재 항이 깔끔하게 정의가 됨
n = int(input())
d= [0]*1001 # n+1로 하면 런타임에러
d[0]=0
d[1]=1
d[2]=3
for i in range(3, n+1):
d[i] = d[i-1] + d[i-2]*2
print(d[n]%10007)