File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree 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