분류: DP /
문제
문제 설명
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×17 직사각형을 채운 한가지 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
풀이
#include <iostream>
using namespace std;
int dp[1001];
int main() {
int n; cin >> n;
dp[0] = dp[1] = 1;
for(int i=2; i<=n; i++)
dp[i] = (dp[i-1] + 2*dp[i-2]) % 10007;
cout << dp[n];
}
타일링 문제 추가된 점은 2 by 2 타일이 있다는 점
i by 2 직사각형을 채우기 위해서는 `i-1`에서 2 by 1 타일 추가 혹은 `i-2`에서 2 by 2 or 1 by 2 두개 추가
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 - 2805] 나무 자르기 - C++ (0) | 2023.11.09 |
---|---|
[백준 - 14891] 톱니바퀴 - C++ (0) | 2023.11.09 |
[백준 - 11559] Puyo Puyo - C++ (0) | 2023.11.07 |
[백준 - 1941] 소문난 칠공주 - C++ (0) | 2023.11.07 |
[백준 - 5525] IOIOI - C++ (0) | 2023.11.06 |