PS/BOJ
BOJ 2133 타일 채우기
모달조아
2021. 7. 8. 03:03
boj 2133 타일 채우기
n이 홀수일 때, 타일을 전부 채울 수 있는 방법은 없다. 그러므로 n이 짝수일 때만 살펴보면 된다.
테이블 D[i]를 n이 i일 때, 타일을 전부 채울 수 있는 방법 수라고 정의하자.
타일이 2칸일 때 채울 수 있는 방법의 수가 3가지인 것은 쉽게 알 수 있다. 그리고 힌트를 보면 4칸의 경우 2칸인 경우를 이용하지 않고 채우는 방법이 2가지가 있다는 것을 알 수 있다. 이 사실만으로 간단하게 점화식을 D[i] = D[i-2]x3 + D[i-4]x2 라고 하면 틀린다.
위의 사진을 보면, 타일이 2칸씩 늘어날 때마다 채우는 방식 2가지가 추가된다. 이를 바탕으로 점화식을 구현해보자.
D[i] = D[i-2]x3 + D[i-4]x2 + D[i-6]x2 + ... + D[0]x2
위 내용을 기반으로 구현한 코드를 보자.
#include <iostream>
using namespace std;
int n;
int D[35];
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
D[0] = 1;
D[2] = 3;
if (n % 2 == 0)
{
for (int i = 4; i <= n; i = i + 2)
{
D[i] = D[i - 2] * 3;
for (int j = 4; j <= i; j = j + 2)
{
D[i] += D[i - j] * 2;
}
}
}
cout << D[n];
}