BOJ::1309 동물원

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


dp문제.


n번째 우리에 대해

왼쪽에 사자를 놓는 경우, 오른쪽에 사자를 놓는 경우, 둘 다 놓지 않는경우 3가지로 나눠서 풀었다.


점화식 :

d[n][0] = d[n-1][1]+d[n-1][2];

d[n][1] = d[n-1][0]+d[n-1][2];

d[n][2] = d[n-1][0]+d[n-1][1]+d[n-1][2];


JAVA


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
class Main{
    
    static int n;
    static int d[][]=new int[100001][3];
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n=Integer.parseInt(br.readLine());
        
        d[1][0]=1;
        d[1][1]=1;
        d[1][2]=1;
        
        for(int i = 2 ; i <= n ;i++){
            d[i][0]=(d[i-1][1]+d[i-1][2])%9901;
            d[i][1]=(d[i-1][0]+d[i-1][2])%9901;
            d[i][2]=(d[i-1][1]+d[i-1][2]+d[i-1][0])%9901;
        }
        
        System.out.println((d[n][0]+d[n][1]+d[n][2])%9901);
        
    }
}
cs



C++


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


'BOJ::문제풀이' 카테고리의 다른 글

1389 케빈 베이컨의 6단계 법칙  (0) 2017.12.31
1325 효율적인 해킹  (0) 2017.12.31
1302 베스트 셀러  (0) 2017.12.31
1260 DFS와 BFS  (0) 2017.12.31
1157 이상한 곱셈  (0) 2017.12.30

+ Recent posts