백준문제풀이
백준 1309 - 동물원 - 2021/04/14
이호진
2021. 4. 14. 19:23
문제 설명
어떤 동물원에 가로로 두칸 세로로 N칸인 아래와 같은 우리가 있다.
이 동물원에는 사자들이 살고 있는데 사자들을 우리에 가둘 때, 가로로도 세로로도 붙어 있게 배치할 수는 없다. 이 동물원 조련사는 사자들의 배치 문제 때문에 골머리를 앓고 있다.
동물원 조련사의 머리가 아프지 않도록 우리가 2*N 배열에 사자를 배치하는 경우의 수가 몇 가지인지를 알아내는 프로그램을 작성해 주도록 하자. 사자를 한 마리도 배치하지 않는 경우도 하나의 경우의 수로 친다고 가정한다.
첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.
첫째 줄에 사자를 배치하는 경우의 수를 9901로 나눈 나머지를 출력하여라.
풀이
arr[3][i] 리스트를 만들고 i에 따라
1. i번째에 아무것도 없을 때
2. i번째의 첫 번째에 사자가 있을 때
3. i번째의 두 번째에 사자가 있을 때 경우로 나누어 i-1번째에 어디 있을 수 있는지 구하는 for문을 만든다
1,2,3의 경우를 모두 더한 값이 i번째에 있을 수 있는 모든 경우의 수
import sys
input=sys.stdin.readline
n=int(input())
arr=[[0]*3 for i in range(n+1)]
arr[1][0]=1
arr[1][1]=1
arr[1][2]=1
for i in range(2,n+1):
arr[i][0]=(arr[i-1][0]+arr[i-1][1]+arr[i-1][2])%9901
arr[i][1]=(arr[i-1][0]+arr[i-1][2])%9901
arr[i][2]=(arr[i-1][0]+arr[i-1][1])%9901
print((sum(arr[n]))%9901)