https://www.acmicpc.net/problem/11726
해당 문제는 다이나믹 프로그래밍 문제로, 2×(1 ~ n)까지 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 dp에 갱신하는 Bottom-Up 방식으로 풀었다.
1) n
을 입력 받아 저장한다.
2) dp
배열을 선언하고, dp[1]을 1로, dp[2]를 2로 초기화한다.
3) dp[3 ~ n]까지 경우의 수를 갱신한다.
4) 최종적으로 2×n 크기의 직사각형을 채우는 경우의 수를 알고 싶은 것이므로 dp[n]를 출력한다.
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int dp[1001];
void solution()
{
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++)
dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
cout << dp[n] ;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
cin >> n;
solution();
}