Koala - 18기/코딩테스트 심화 스터디

[백준/C++] 2133번: 타일 채우기

.우디. 2025. 3. 29. 01:23

문제 & 링크

https://www.acmicpc.net/problem/2133

 

풀이

1. bottom-up 방식으로 dp 테이블을 채운다.

2. 타일의 크기가 2이기 때문에 N이 홀수일 경우 벽을 채울 수 없다. 따라서 N이 짝수일 경우만 생각한다.

3. 기본적으로 N이 2씩 증가될 때 마다 기존의 개수에 3을 곱해준다. (3 x 2의 타일을 채우는 방법이 3가지)

4. N이 2씩 증가되며 새로운 모양이 등장한다.

5. 위의 모양을 고려하여 점화식을 구한다. (아래의 사진 참고)

코드

#include <iostream>

using namespace std;

int dp[31];

int main() {
    int N;

    cin >> N;

    dp[0] = 1; // dp 테이블을 채우기 위함
    dp[2] = 3;

    int sum = 0;
    for (int i = 4; i <= N; i += 2) {
        sum += dp[i - 4]; 
        dp[i] = dp[i - 2] * 3 + sum * 2;
    }


    cout << dp[N];
}