문제 & 링크

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];
}
'Koala - 18기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/C++] 2688번: 줄어들지 않아 (0) | 2025.03.30 |
---|---|
[python/백준] 15724: 주지수 (0) | 2025.03.29 |
[백준/Python] 16571번 : 알파 틱택토 (0) | 2025.03.28 |
[백준/C++] 15686번: 치킨 배달 (0) | 2025.03.23 |
[백준/C++] 20529번: 가장 가까운 세 사람의 심리적 거리 (0) | 2025.03.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];
}
'Koala - 18기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/C++] 2688번: 줄어들지 않아 (0) | 2025.03.30 |
---|---|
[python/백준] 15724: 주지수 (0) | 2025.03.29 |
[백준/Python] 16571번 : 알파 틱택토 (0) | 2025.03.28 |
[백준/C++] 15686번: 치킨 배달 (0) | 2025.03.23 |
[백준/C++] 20529번: 가장 가까운 세 사람의 심리적 거리 (0) | 2025.03.23 |