백준

[11727번] 2xn 타일링 2

날아가는기억잡기 2021. 2. 25. 12:17

문제

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를 곱하여 더해주면 답이 된다. 

출처

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

[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