본문 바로가기

Algorithm/Dynamic Programming

[C++] 백준 1309번 : 동물원 (S1)

#문제

www.acmicpc.net/problem/1309

 

1309번: 동물원

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

www.acmicpc.net

#풀이 & 학습한 내용

x가 빈공간, o가 사자가 있는공간이라 할 때, 한 줄에서 가능한 경우는 xx, ox, xo이다. 그리고 이 각각의 경우에 대해 optimization을 살펴본다. dp[i][0]을 i번째 줄이 xx일 때, 총 경우의 수, dp[i][1]을 i번째 줄이 ox일 때, 총 경우의 수, dp[i][2]을 i번째 줄이 xo일 때, 총 경우의 수라 하자. 이때 코드의 13~15행에 해당하는 optimal substructure를 통해 for문으로 dp배열을 채워나간다. 

#소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include<algorithm>
 
using namespace std;
 
long long dp[100002][3];
 
int main(void) {
    int N;
    cin >> N;
    dp[1][0= 1; dp[1][1= 1; dp[1][2= 1;
    for (int i = 2; i <= N; i++) {
        dp[i][0= (dp[i - 1][0+ dp[i - 1][1+ dp[i - 1][2]) % 9901;
        dp[i][1= (dp[i - 1][0+ dp[i - 1][2]) % 9901;
        dp[i][2= (dp[i - 1][0+ dp[i - 1][1]) % 9901;
    }
 
    cout << (dp[N][0+ dp[N][1+ dp[N][2]) % 9901 << '\n';
 
}
cs

 

github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_1309.cpp

 

HoYoungChun/BOJ_algorithm

Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.

github.com