반응형

문제 링크

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

 

 

풀이 ) DP

  직사각형의 첫 타일이 2 x 1인 경우와 1 x 2 2개로 시작하는 2가지 경우로 나눌 수 있다.

  2 x 1로 시작하는 경우 뒤에 2 x (n-1) 직사각형을 채우면 되고

  1 x 2로 시작하는 경우 뒤에 2 x (n-2) 직사각형을 채우면 된다.

  점화식은 memo[n] = memo[n-1] + memo[n-2]이다.

 

#include <cstdio>
#include <algorithm>
using namespace std;

int memo[1002] = {0, 1, 2, };

int main(void)
{
    int n;
    scanf("%d", &n);

    for(int i = 3; i <= n; ++i)
        memo[i] = (memo[i-1] + memo[i-2])%10007;
    printf("%d\n", memo[n]);
    return 0;
}

 

주의점 )

  memo[n]을 구하는 과정에서 모듈러 연산을 해줘야지 정수 오버플로우가 발생하지 않는다.

반응형

'문제풀이 > 백준' 카테고리의 다른 글

[C++] 백준 - 9465 : 스티커  (0) 2020.03.14
[C++] 백준 - 11727 : 2 x n 타일링 2  (0) 2020.03.14
[C++] 백준 - 1904 : 01타일  (0) 2020.03.13
[C++] 백준 - 2193 : 이친수  (0) 2020.03.13
[C++] 백준 - 1463 : 1로 만들기  (0) 2020.03.13

+ Recent posts