Baekjoon2133-타일 채우기
Baekjoon2133-타일 채우기
백준 사이트 2133 - 타일 채우기 문제입니다.
1. 문제
https://www.acmicpc.net/problem/2133
2. Input , Output
3. 분류 및 난이도
dp문제입니다. 기존 타일 문제과 달리 해줘야할 전처리들이 있습니다. 백준에서는 Sliver2의 난이도를 책정하고 있습니다.
4. 생각한 것들
- 홀수인 경우 타일을 채울 수 없습니다. 직접그려보면 알 수 있습니다.
- n이 4 이상인 경우 새로운 타일들이 생겨납니다.
- (1)에서 특수한 경우만 세주는 이유는 특수한 경우가 아닐 경우 3 * 2 + 3 * 2 + 3 * 2 로 나눠지므로 이는 다시 3 * 2 + 3 * 4로 합쳐지므로 사실상 (2)에서 이미 세졌기 때문입니다.
5. code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n;
cin >> n;
int dp[31] = { 1,0,3,0 };
for (int i = 4; i <= n; i+=2)
{
//일반적인 case
dp[i] = dp[i - 2] * 3;
for (int j = 4; i - j >= 0; j += 2)
{
dp[i] += dp[i - j] * 2;
}
}
cout << dp[n];
}
6. 후기
타일 채우기에 좀 익숙해진 것 같다.
This post is licensed under CC BY 4.0 by the author.