백준 11726 2Xn 타일링 [c++]
2Xn 타일링 실버3
문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
문제 풀이
1~5까지 그려보니 피보나치임을 알 수 있었다. 그래서 dp로 풀었다. 금방 풀었다. 그런데 10007로 나눈 나머지를 출력해야 하는데 dp를 계산할 때 적용해도 동일한 결과가 나옴을 알 수 있었다.
- modulo 특징 적용!
코드
#include <iostream>
using namespace std;
int tile[1002];
void dp(int n)
{
tile[1] = 1;
tile[2] = 2;
for(int i = 3; i <= n; i++)
{
tile[i] = (tile[i-1] + tile[i-2]) % 10007;
}
}
int main()
{
int n;
cin >> n;
for(int i = 0; i <= 1000; i++)
{
tile[i] = 0;
}
dp(n);
cout << tile[n] << endl;
return 0;
}
총평
- Easy.
- but 조건 잘 읽자.