문제 링크
https://www.acmicpc.net/problem/11727
11727번: 2×n 타일링 2
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.
www.acmicpc.net
풀이
- dp 문제
- dp[i] 는 2*i 크기의 직사각형을 채우는 방법의 수
dp[i-2]에서 1*2 두개나 2*2 를 놓을 수 있으므로 2 * dp[i-2]
이 때 2*1 두개를 놓는 방법은 dp[i-1]에서 2*1 하나 놓을 때와 겹치므로 고려하지 않는다.
dp[i-1]에서 2*1 하나 놓을 수 있으므로 dp[i-1]
따라서 dp[i] = 2*dp[i-2] + dp[i-1]
import sys
input= sys.stdin.readline
n = int(input())
if n == 1:
print(n)
elif n == 2:
print(3)
else:
dp = [0] * n
dp[0] = 1
dp[1] = 3
for i in range(2,n):
dp[i] = dp[i-1] + 2*dp[i-2]
print(dp[n-1]%10007)
'개발 > algorithm' 카테고리의 다른 글
[백준 1541번] 잃어버린 괄호 - python (0) | 2022.02.15 |
---|---|
[백준 1927번] 최소 힙 -python (0) | 2022.02.15 |
[백준 11726번] 2 x n 타일링 - python (0) | 2022.02.14 |
[백준 11659번] 구간 합 구하기 4 - python (0) | 2022.02.14 |
[백준 11399번] ATM - python (0) | 2022.02.14 |