문제 링크
3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자.
N = 6
까지는 손으로 그려볼 수 있기 때문에 직접 그려보며 접근한다.1x2, 2x1
타일로 벽을 채울 수 없음을 알 수 있다. 따라서 입력 N이 홀수일 때는 예외처리가 필요하다.N = 2
일 때는 다음과 같은 3가지 배치가 가능하다. N이 짝수만 허용한다면 N = 4
부터는 독립적으로 3가지 씩 경우의 수가 추가될 것이므로 3 x 3 = 9
가지 경우가 가능함을 알 수 있다.N = 4
일 때는 이런 배치도 가능하다.N=4
부터는 추가로 고려해줘야 하는 사항이 있다. N=6
일 때는 어떨까?N=4
일 때와 독립적으로 배치 가능한 3가지 경우가 있다.#include <iostream>
using namespace std;
int n, dp[31];
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n;
dp[0] = 1;
for (int i = 2; i <= n; i += 2) {
dp[i] = 3 * dp[i - 2];
for (int j = 4; j <= i; j += 2)
dp[i] += 2 * dp[i - j];
}
cout << dp[n] << '\n';
}