PS (Problem Solving)/Baekjoon
[백준] 2302. 극장 좌석 - 파이썬
캐럿노트
2023. 3. 2. 23:25
문제
https://www.acmicpc.net/problem/2302
2302번: 극장 좌석
주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1)
www.acmicpc.net
설계
- vip 사이의 구간별 자리수를 cal 함수에 넣는다.
- cal 함수로 구간별 경우의 수를 구한 뒤 answer에 곱한다.
파이썬
# 앉을 수 있는 경우의 수를 계산하는 점화식 함수
def cal(n):
if n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 3
else:
dp = [0] * (n + 4)
dp[0], dp[1] = 1, 1
for i in range(3, n + 4):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[-1]
N = int(input())
M = int(input())
arr = [int(input()) for _ in range(M)]
# VIP를 기준으로 나눠진 구역마다 않을 수 있는 경우의 수를 answer에 곱한다.
answer, start = 1, 0
for i in range(M):
cnt = (arr[i] - (start + 1))
start = arr[i]
result = cal(cnt)
answer *= result
# for문을 마치고 곱하지 못한 나머지 끝 구역을 곱한다.
cnt = N - start
result = cal(cnt)
answer *= result
print(answer)