Coding_Test 연습/Baekjoon Online Judge
[BOJ] (C++) 1309 동물원
Codetesing
2022. 9. 7. 13:07
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;
}