백준문제풀이/DP

11726번-2*n 타일링

문제

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

 

11726번: 2×n 타일링

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

www.acmicpc.net


접근방법

1) 접근 사고

가로만 봐주면 되는 문제이다. 왜냐하면 가로를 2간 채워서 넣을 것인지 1칸 채워서 넣을 것인지만 봐주면 되기 때문이다.

 

2) 시간 복잡도

O(n)으로 해결 간으!

 

3) 배운 점

배열에서 인덱스를 계산해주는 문제와 유사한거 같다. 규칙을 찾아서 점화식을 만들어 푸는 방법도 존재한다.

 

4) PS


정답 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<bits/stdc++.h>
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define pii pair<int,int>
#define mp(X,Y) make_pair(X,Y)
#define mt(X,Y) make_tuple(X,Y)
#define mtt(X,Y,Z) make_tuple(X,Y,Z)
#define ll long long
#define sz(v) (int)(v).size()
 
using namespace std;
const int MAX = 1001;
const int mod = 10007;
int n;
int cache[MAX];
 
int search(int width)
{
    if(width == 0)
        return 1;
 
    if(width < 0)
        return 0;
 
    int &ret = cache[width];
    if(ret != -1)
        return ret;
    ret = (search(width - 1+ search(width - 2)) % mod;
    return ret;
}
 
int main(void)
{
    fastio;
    cin >> n;
 
    memset(cache, -1sizeof cache);
    cout << search(n) << "\n";
}
cs

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

17069번-파이프 옮기기2  (0) 2021.08.17
11727번-2*n 타일링2  (0) 2021.08.17
1932번-정수 삼각형  (0) 2021.08.17
1890번-점프  (0) 2021.08.17
1912번-연속합  (0) 2021.08.17