참고자료: https://yabmoons.tistory.com/536
[ 백준 2133 ] 타일 채우기 (C++)
백준의 타일채우기(2133) 문제이다.[ 문제 바로가기 ] [ 문제풀이 ]3 x N 크기의 벽을 2 x 1 , 1 x 2 타일들로만 채울 때, 그 경우의 수를 구해야 하는 문제이다.작은 수들부터 차근차근 만들어보면서 하
yabmoons.tistory.com
사용되는 알고리즘 : dp

* 특별한 경우를 잘 확인해야한다. => 이전 타일을 이용해서 쌓아가는 걸 제외하고 특별한 모양
* n이 홀수일 경우는 애초에 고려하지 않는다. => 3 * odd의 경우 넓이는 홀수값이 되는데 2*1 또는 1*2로 채우는 경우는 값이 무조건 짝수가 나와야 한다.
#include <iostream>
using namespace std;
int dp[31];
int main(int argc, char const *argv[])
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
dp[0] = 1;
dp[2] = 3;
if (n % 2 == 1)
{
cout << 0;
return 0;
}
for (int i = 4; i <= n; i += 2)
{
dp[i] = dp[i - 2] * dp[2];
for (int j = i - 4; j >= 0; j -= 2)
{
dp[i] += 2 * dp[j];
}
}
cout << dp[n];
return 0;
}
참고자료에 올린 블로그에서 설명을 자세하게 해주어서 이해하는데 많은 도움이 되었다.
'알고리즘' 카테고리의 다른 글
백준[1351번] 무한수열 C++ (0) | 2023.11.06 |
---|---|
백준[15663번] N과 M(9) (2) | 2023.10.31 |
백준[3197번] 백조와 호수 (0) | 2023.09.19 |
백준[1655번] 가운데를 말해요 (0) | 2023.09.19 |
백준 14889번 스타트와 링크 (0) | 2023.09.07 |