소스코드
n = int(input())
dp = [0,1,3]
for i in range(3,n+1):
dp.append(2 * dp[i-2] + dp[i-1])
print(dp[n] % 10007)
저번 문제와 동일한 구조이다.
이번에는 2x2 타일이 추가되었으므로,
dp[n-2] 에서 dp[n] 이 되기 위해선 1x2 타일 2개를 놓는 방법, 2x2 타일 1개를 놓는 방법 -> 2 * dp[n-2] 의 횟수와 동일
+
dp[n-1] 에서 dp[n] 이 되기 위해서 2x1 타일 1개를 놓는 방법 -> dp[n-1] 의 횟수를 더해주면 된다.
즉, dp[n] = 2 * dp[n-2] + dp[n-1]
로직이 거의 동일하여 더 이상의 설명은 생략하겠다.
자세한 설명은 11276 참고!
'알고리즘 > 동적프로그래밍(DP)' 카테고리의 다른 글
[Python] 백준 11057번: 오르막 수 풀이 (0) | 2021.01.21 |
---|---|
[Python] 백준 10844번: 쉬운 계단 수 풀이 (0) | 2021.01.21 |
[Python] 백준 9095번: 1, 2, 3 더하기 풀이 (0) | 2021.01.21 |
[Python] 백준 11726번: 2xn 타일링 풀이 (0) | 2021.01.20 |
[Python] 백준 1463: 1로 만들기 풀이 (0) | 2021.01.20 |
댓글