백준

[11726번] 2xn 타일링

날아가는기억잡기 2021. 2. 24. 23:25

문제

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 크기의 타일을 놓는 것과 피보나치 수열이 동일한 규칙성을 나타낸다는 것을 알아내고 코드를 위와 같이 짰다.

출처

 

 

 

'백준' 카테고리의 다른 글

[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