File tree 2 files changed +59
-0
lines changed
2 files changed +59
-0
lines changed Original file line number Diff line number Diff line change
1
+ # [ Silver I] 동물원 - 1309
2
+
3
+ [ 문제 링크] ( https://www.acmicpc.net/problem/1309 )
4
+
5
+ ### 성능 요약
6
+
7
+ 메모리: 3192 KB, 시간: 0 ms
8
+
9
+ ### 분류
10
+
11
+ 다이나믹 프로그래밍
12
+
13
+ ### 제출 일자
14
+
15
+ 2025년 3월 30일 16:36:42
16
+
17
+ ### 문제 설명
18
+
19
+ <p >어떤 동물원에 가로로 두칸 세로로 N칸인 아래와 같은 우리가 있다.</p >
20
+
21
+ <p ><img alt =" " src =" https://www.acmicpc.net/upload/201004/dnfl.JPG " style =" height :223px ; width :224px " ></p >
22
+
23
+ <p >이 동물원에는 사자들이 살고 있는데 사자들을 우리에 가둘 때, 가로로도 세로로도 붙어 있게 배치할 수는 없다. 이 동물원 조련사는 사자들의 배치 문제 때문에 골머리를 앓고 있다.</p >
24
+
25
+ <p >동물원 조련사의 머리가 아프지 않도록 우리가 2*N 배열에 사자를 배치하는 경우의 수가 몇 가지인지를 알아내는 프로그램을 작성해 주도록 하자. 사자를 한 마리도 배치하지 않는 경우도 하나의 경우의 수로 친다고 가정한다.</p >
26
+
27
+ ### 입력
28
+
29
+ <p >첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.</p >
30
+
31
+ ### 출력
32
+
33
+ <p >첫째 줄에 사자를 배치하는 경우의 수를 9901로 나눈 나머지를 출력하여라.</p >
34
+
Original file line number Diff line number Diff line change
1
+ #include < iostream>
2
+
3
+ using namespace std ;
4
+
5
+ int dp[100001 ][3 ];
6
+ int mod = 9901 ;
7
+
8
+ int main () {
9
+ int N;
10
+ cin >> N;
11
+ dp[0 ][0 ] = 1 ;
12
+ dp[0 ][1 ] = 1 ;
13
+ dp[0 ][2 ] = 1 ;
14
+
15
+ for (int i = 1 ; i < N; i++) {
16
+ dp[i][0 ] = (dp[i-1 ][1 ] + dp[i-1 ][2 ]) % mod;
17
+ dp[i][1 ] = (dp[i-1 ][0 ] + dp[i-1 ][2 ]) % mod;
18
+ dp[i][2 ] = (dp[i-1 ][0 ] + dp[i-1 ][1 ] + dp[i-1 ][2 ]) % mod;
19
+ }
20
+
21
+ const int answer = (dp[N-1 ][0 ] + dp[N-1 ][1 ] + dp[N-1 ][2 ]) % mod;
22
+ cout << answer << ' \n ' ;
23
+
24
+ return 0 ;
25
+ }
You can’t perform that action at this time.
0 commit comments