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

+ Recent posts