코테 공부/프로그래머스

[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)