🗂️ 문제
링크: https://www.acmicpc.net/problem/11727
💡 접근법
N=1일 때, 2x1 직사각형을 채우는 방법의 수는 2x1 크기의 타일 하나로 채우는 방법 1가지이다.
N=2일 때, 2x2 직사각형을 채우는 방법의 수는 2x1 크기의 타일 2개를 이어붙이는 방법, 1x2 크기의 타일 2개를 이어붙이는 방법, 2x2 크기의 타일 하나로 채우는 방법, 총 3가지이다.
N=3일 때, 2x3 직사각형을 채우는 방법은 다음과 같다.
- 2x2 직사각형에 2x1 직사각형을 이어붙인다.
- 2x1 직사각형에 1x2 크기의 타일 2개를 이어붙이거나, 2x2 크기의 타일 1개를 이어붙인다.
이때, 2x1 크기의 타일 2개를 이어붙이는 경우의 수는 1번에 포함되기 때문에 카운트하지 않는다.
이를 점화식으로 나타내면, dp[i] = dp[i-1] + dp[i-2]*2 (N≥3)이다.
😎 내 코드
import sys
N = int(sys.stdin.readline())
dp = [0] * (N+1)
dp[1] = 1
if N >= 2:
dp[2] = 3
for i in range(3, N+1):
dp[i] = dp[i-1] + dp[i-2]*2
print(dp[N]%10007)
🧐 배운 점
- N 범위가 1 =≤ N ≤ 10000 이다. 점화식에 의해 dp[1], dp[2]를 초기화하게 되는데, N = 1일 경우에 대한 예외 처리가 필요하다.
✅ 정답 확인
'Algorithm > Baekjoon' 카테고리의 다른 글
[DP] 백준 #1149 RGB 거리 - Python (0) | 2025.01.16 |
---|---|
[DP] 백준 #1699 제곱수의 합 - Python (0) | 2024.07.25 |
[BFS] 백준 #2468 안전 영역 - Python (0) | 2024.05.30 |
[BFS] 백준 #7562 나이트의 이동 - Python (0) | 2024.05.26 |
[큐] 백준 #1966 프린터 큐 - Python (0) | 2024.05.26 |