문제
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;
beg = temp;
cur %= 10007;
calculate(cur_num+1);
}
int main(void) {
scanf("%d", &n);
calculate(1);
printf("%d\n", cur);
}
규칙을 찾다보니 2xn 크기의 타일을 놓는 것과 피보나치 수열이 동일한 규칙성을 나타낸다는 것을 알아내고 코드를 위와 같이 짰다.
출처
- 문제를 만든 사람: baekjoon
'백준' 카테고리의 다른 글
[2193번] 이친수 (0) | 2021.02.25 |
---|---|
[11727번] 2xn 타일링 2 (0) | 2021.02.25 |
[19542번] 전단지 돌리기 (0) | 2020.08.08 |
[15999번] 뒤집기 (0) | 2020.08.05 |
[2132번] 나무 위의 벌레 (0) | 2020.05.26 |