문제
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×17 직사각형을 채운 한가지 예이다.
입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
나의 답
#include <bits/stdc++.h>
using namespace std;
// n: 크기, solution: 방법 수
int n, solution;
int cur = 1, beg = 1;
void calculate(int cur_num) {
if(cur_num == n)
return;
int temp = cur;
cur += beg * 2;
beg = temp;
cur %= 10007;
calculate(cur_num+1);
}
int main(void) {
scanf("%d", &n);
calculate(1);
printf("%d\n", cur);
}
위 문제는 이전에 11726번 문제와 거의 유사하다. 차이 점이 있다면 두개의 타일을 배치할 수 있는 방법의 수가 한가지 는 것뿐이다. 이전 문제에서는 n번째까지의 방법을 알기 위해 n-1 번째에서 하나를 더 놓는 것, n-2번째에서 2개를 더 놓는 것 이렇게 두 수를 더했더라면 이번 문제에서는 n-2번째에서 2개를 더 놓는 방법의 수가 하나 더 는 것이다. 따라서, begin을 더할 때 2를 곱하여 더해주면 답이 된다.
출처
- 문제를 만든 사람: baekjoon
'백준' 카테고리의 다른 글
[10430번] 나머지 (0) | 2021.11.20 |
---|---|
[2193번] 이친수 (0) | 2021.02.25 |
[11726번] 2xn 타일링 (0) | 2021.02.24 |
[19542번] 전단지 돌리기 (0) | 2020.08.08 |
[15999번] 뒤집기 (0) | 2020.08.05 |