혼자 정리

11727번: 2×n 타일링 2 본문

알고리즘 문풀/백준

11727번: 2×n 타일링 2

tbonelee 2021. 8. 8. 14:55

문제링크

C++

#include <iostream>

using namespace std;

int memo[1001];
int n;

void dp(int n);

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;

    dp(n);

    cout << memo[n] << "\n";
}

void dp(int n){
    memo[0] = 1;
    memo[1] = 1;
    for (int i = 2; i <= n; i++){
        memo[i] = (memo[i - 1] + memo[i - 2] * 2) % 10007;
    }
}
  • DP로 해결.
  • 2*n 크기의 공간을 채우는데에는 2*(n - 1)의 공간을 채우고 세로로 길쭉한 블럭을 놓는 경우(한 가지)와, 2*(n - 2)의 공간을 채우고 2*2크기의 블럭을 넣는 경우, 가로로 긴 블럭 두 개를 넣는 경우(두 가지)가 있다.
  • 따라서 $memo[i] = memo[i - 1] + memo[i - 2] * 2$의 점화식이 도출.
  • $O(n)$

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

11724번: 연결 요소의 개수  (0) 2021.08.09
6064번: 카잉 달력  (0) 2021.08.09
11659번: 구간 합 구하기 4  (0) 2021.08.08
9375번: 패션왕 신해빈  (0) 2021.08.08
17219번: 비밀번호 찾기  (0) 2021.08.07