본문으로 바로가기

[백준] 1309번 : 동물원

category 알고리즘/백준 2023. 1. 19. 14:35

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

 

1309번: 동물원

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

www.acmicpc.net

 


문제 : 

가로로 2칸, 세로로 N칸인 동물원에서 사자를 이웃하지 않고 배치할 수 있는 경우의 수를 구하는 문제이다. 

 

 

풀이: 다이나믹 프로그래밍 (DP)

 

임의의 층에 사자를 배치할 수 있는 방법은 총 3가지 이다. 

 

1. 두 칸 모두 사자가 없는 경우 => 0이라고 칭함

2. 왼쪽에만 사자가 있는 경우 => 1이라고 칭함

3. 오른쪽에만 사자가 있는 경우 => 2라고 칭함

 

1번 두 칸 모두 사자가 없는 경우는

이전 칸에 어떻게 사자를 배치하더라도 구애받지 않는다. 

 

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

 

 

2번 왼쪽에만 사자가 있는 경우는

이전 줄에 모두 사자가 없거나, 사자가 오른쪽에 배치되어야 가능한 구조이다. 

 

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

 

 

3번 오른쪽에만 사자가 있는 경우는

이전 줄에 모두 사자가 없거나, 사자가 왼쪽에 배치되어야 가능하다. 

 

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

 

 

초기 사자의 경우의 수는 모두 1로 시작해서 DP를 실행하면 된다. 

 

 

중간에 %9901 연산이 없으면 메모리가 부족하므로 꼭 넣어주어야한다. 

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1303번 전쟁 - 전투 (Java)  (0) 2023.03.09
[백준] 1629번 곱셈  (0) 2023.02.08
[백준] 1052. 물병  (0) 2023.01.12
[BaekJoon] 백준 1240. 노드사이의 거리  (0) 2022.09.27
[BaekJoon] 백준 12868번. 돌 그룹  (0) 2022.09.16