본문 바로가기
알고리즘/백준

백준 11727번 (2xn 타일링 2) c++

by Jo_Wick 2023. 6. 28.
반응형

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

 

11727번: 2×n 타일링 2

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

www.acmicpc.net

문제풀이

이전에 풀이했던 2xn 타일링을 보고 오면 훨씬 쉽게 이해할 수 있다.

 

이 문제는 DP를 이용하여 푸는 문제이다.

다른 많은 풀이 사이트에서는 단순히 DP[i] = DP[i-1] + (DP[i-2]*2) 라는 이유를 N에 따라 세어보았을 때 이게 말이 된다라는 식으로 많이 적어놓았다.

하지만 밑에 적어 놓은 것을 보면 제대로 된 규칙을 알 수 있다.

DP[i-2] 에는 1x2인 2개의 타일과 2x2인 1개의 타일이 붙고,
DP[i-1] 에는 2x1인 1개의 타일이 붙은 두가지 경우의 수를 합치면 DP[i]가 완성되는 것이다.

 

전체 코드

#include <iostream>

using namespace std;

int main(){

        ios_base::sync_with_stdio(0);
        cin.tie(0);

        int N;

        cin >> N;

        int DP[1001];
        DP[1] = 1;
        DP[2] = 3;

        for(register int i = 3; i <= N; ++i){

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

        }

        cout << DP[N] << '\n';


        return 0;

}
반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 11726번 (2xn 타일링) c++  (0) 2023.06.28
백준 1158(요세푸스) c++  (0) 2023.04.21
백준 1874번(스택 수열) c++  (0) 2023.04.18
백준 에디터 (1406번) c++  (0) 2023.04.18
백준 9012번(괄호)  (0) 2023.04.17

댓글