DP를 이용한 문제였다.
각 row 별로 3개의 경우의 수가 있다.
0는 좌 우 모두 사자가 없는경우 1은 왼쪽만 있는경우 2는 오른쪽 있는 경우로 해서
반복문을 통하여 셋의 합을 통해 모든 경우의 수를 구하였다.
문제링크 : 1309번: 동물원 (acmicpc.net)
#include <iostream>
#include <vector>
using namespace std;
#define MOD 9901
int main() {
int N;
cin >> N;
vector<vector<int>> DP(N, vector<int>(3, 1));
for (int i = 1; i < N; i++)
{
DP[i][0] = (DP[i - 1][0] + DP[i - 1][1] + DP[i - 1][2]) % MOD;
DP[i][1] = (DP[i - 1][0] + DP[i - 1][2]) % MOD;
DP[i][2] = (DP[i - 1][0] + DP[i - 1][1]) % MOD;
}
cout << (DP[N - 1][0] + DP[N - 1][1] + DP[N - 1][2]) % MOD << '\n';
return 0;
}'Coding_Test 연습 > Baekjoon Online Judge' 카테고리의 다른 글
| [BOJ] (C++) 1890 점프 (0) | 2022.09.08 |
|---|---|
| [BOJ] (C++) 9655 돌 게임 (0) | 2022.09.08 |
| [BOJ] (C++) 11660 구간 합 구하기 5 (0) | 2022.09.06 |
| [BOJ] (C++) 2225 합분해 (0) | 2022.09.05 |
| [BOJ] (C++) 1520 내리막 길 (0) | 2022.04.08 |