문제 링크: www.acmicpc.net/problem/2302

 

2302번: 극장 좌석

주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1)

www.acmicpc.net

문제 유형: DP

백준 2302번 극장좌석 문제

접근방식:

합의 법칙 -> 두 사건이 동시에 일어나지 않을 경우 더한다.

곱의 법칙 -> 두 사건이 동시에 일어날 경우 곱한다.

참고

 

합의 법칙, 곱의 법칙

합의 법칙, 곱의 법칙은 [중등수학/중2 수학] - 경우의 수, 합의 법칙, 곱의 법칙에서 공부했었어요. 물론 기억나지 않겠지만요. 합의 법칙, 곱의 법칙은 경우의 수를 구하는 방법이에요. 이 과정

mathbang.net

좌석을 옮기는 방법은 2가지다.

1. 좌석을 옮기지 않는 경우 -> dp[n-1]

2. 좌석을 옮기는 경우 -> dp[n-2]

이에 따라 점화식은 다음과 같다.

dp[n] = dp[n-1] + dp[n-2]

 

코드:

Python 3

n = int(input())
m = int(input())

vip = []
for i in range(0,m):
    k = int(input())
    vip.append(k)
sit = [1,1,2]
for i in range(3,41):
    sit.append(sit[i-2]+sit[i-1])
ans = 1
if m >= 1:
    pre = 0
    for i in range(0,m):
        ans = ans * sit[vip[i]-1-pre]
        pre = vip[i]
    ans = ans * sit[n-pre]
else:
    ans = sit[n]
print(ans)

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

[백준]2742번: 기찍 N  (0) 2021.01.21
[백준]2741번: N 찍기  (0) 2021.01.21
[백준]15552번: 빠른 A + B  (0) 2021.01.21
[백준]2747번: 피보나치 수  (2) 2020.12.13
[백준] 1915번 : 가장 큰 정사각형  (0) 2020.12.08
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기