#include <iostream>
using namespace std;
int n;
int ans[1001] = {0, 1, 3,};
int main(void)
{
cin >> n;
for(int i = 3 ; i <= n ; i++)
{
// i번째 경우 = i-1번째에 2x1 놓기 + i-2번째에 x 2번(2x2 / 1x2 두개 놓기)
ans[i] = (ans[i-1] + ans[i-2] * 2) % 10007;
}
cout << ans[n] << '\n';
}
[Try]
1. 2xn 타일링 1번 문제와 비슷한 느낌으로 접근하였다.
[Point]
1. 2x2 박스가 추가된 것인데, n-2 번째의 경우의 수에서 2x2 를 놓냐 2x1 을 놓냐의 두가지가 생긴 것이기 때문에 2만 곱해주면 끝!
'PS > BOJ' 카테고리의 다른 글
[백준] 6064.cpp : 카잉 달력 (0) | 2020.05.29 |
---|---|
[백준] 1003.cpp : 피보나치 함수 (0) | 2020.05.28 |
[백준] 1931.cpp : 회의실배정 (0) | 2020.05.27 |
[백준] 11724.cpp : 연결 요소의 개수 (0) | 2020.05.27 |
[백준] 1620.cpp : 나는야 포켓몬 마스터 이다솜 (0) | 2020.05.27 |