[백준 알고리즘] 11726번: 2xn 타일링

[백준 알고리즘] 11726번: 2xn 타일링 (C++)

https://www.acmicpc.net/problem/11726

문제

문제 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

입력 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

출력 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

풀이

이런 류의 DP는 역시 노가다이다!

N 0 1 2 3 4 5 6
방법의 수 0 1 2 3 5 8 13

그렇다. 피보나치 수열로 경우의 수가 증가한다.

코드

#include <iostream>

using namespace std;

int dp[1001] = {0};

int main(){
    int n;
    cin >> n;
    dp[0] = 1;
    dp[1] = 1;

    for(int i = 2 ; i <= n ; i++){
       dp[i] = dp[i-2]%10007 + dp[i-1]%10007;
    }

    cout << dp[n]%10007 ;
}

Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.