[BOJ]2302

zzarbttoo·2025년 7월 26일
0

알고리즘

목록 보기
50/52

BOJ 2302- 극장 좌석

  • DP를 이용해서 푸는 문제
  • 주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. 라는 조건이 존재하므로 자료형 오버플로우 걱정 X

문제 풀이

from collections import defaultdict
import math

N = int(input())
M = int(input())
fix = [int(input()) for _ in range(M)]

dy_sits = []
sits = []

for sit in range(1, N + 1):
    if sit in fix:
        if sits:
            dy_sits.append(sits)
        sits = []
        continue
    sits.append(sit)

if sits:
    dy_sits.append(sits)

def count_var(dy_sit):
    memo = defaultdict(int) 
    memo[1] = 1 
    memo[2] = 2

    if len(dy_sit) <= 2:
        return memo[len(dy_sit)]

    for i in range(3, len(dy_sit) + 1):
        memo[i] = memo[i - 1] + memo[i - 2]

    return memo[len(dy_sit)]

count = []
for dy_sit in dy_sits:
    count.append(count_var(dy_sit))

print(math.prod(count))

테스트 케이스


N, M, fix = 9, 2, [4, 7]
N, M, fix = 6, 2, [3, 4]
profile
나는야 누워있는 개발머신

0개의 댓글