Baekjoon/Silver

C++ / 백준 / 1309 / 동물원

GitHubSeob 2024. 3. 28. 16:08
문제

 

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

 

1309번: 동물원

첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.

www.acmicpc.net

 

문제풀이

 

경우의 수를 나눠 DP 하는 문제인 줄 알았는데 총개수를 세고 나니까 단순히 DP 하면 되는 문제였다.

N이 1일 때

배치 X: 1

한 마리 배치: N*2 = 2

= 3

 

N이 2일 때

배치 X: 1

한 마리 배치: N*2 = 4

두 마리 배치: 2

= 7

 

N이 3일 때

배치 X: 1

한 마리 배치: N*2 = 6

두 마리 배치: 8

세 마리 배치: 2

= 17

 

이런 식으로 개수를 세면 규칙이 보인다.

answer[N] = answer[N-1]*2 + answer[N-2]

코드
#include <iostream>
#include <vector>
#define DIV 9901
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int N(0);
	cin >> N;
	
	vector<int>answer(100001, 0);
	answer[0] = 1;
	answer[1] = 3;	
	
	for (int idx = 2; idx <= N; ++idx) {
		answer[idx] = ((answer[idx - 1] * 2) % DIV + answer[idx - 2]) % DIV;		
	}
	cout << answer[N];
}