알고리즘(Algorithm)

2xN 타일링 (11726번)

맛두부 2017. 3. 6. 23:31

1. 문제


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

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

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

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



2. 포인트
    1) 동적 계획법 (DP) 접근
    2) DP 배열에 저장시, 10007로 나눈 나머지 저장.
        → 그냥 저장하고 이후 출력시 10007로 나누려고하면
          점화식 배열 저장 시, int 범위 초과되어 저장 값 오류


3. 소스코드


#include <stdio.h>


int main(void)

{

int DP[1001] = {0,1,2,3,};

int i, N;


scanf("%d", &N);


for (i = 4; i <= N; i++)

DP[i] = (DP[i-1] + DP[i-2])%10007;


printf("%d", DP[N]);

return 0;

}