혼자 정리
11727번: 2×n 타일링 2 본문
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 |