반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- N과M
- python
- level2
- level1
- 딕셔너리
- 프로그래머스
- 에라스토테네스의 체
- 운영체제
- BFS
- level0
- 다익스트라
- 파이썬
- DP
- 다이나믹 프로그래밍
- 재귀
- level3
- 수학
- 스택
- MYSQL
- 코딩테스트
- BOJ
- 가상메모리
- 힙
- dfs
- programmers
- 가상메모리 관리
- 구현
- 브루트포스
- 백준
- 그리디
Archives
- Today
- Total
동캄의 코딩도장
백준 2302 [극장 좌석] 파이썬 본문
반응형
https://www.acmicpc.net/problem/2302
# 최종 정답을 저장할 변수
ans = 1
# 전체 좌석 개수 N 입력
N = int(input())
# VIP 좌석 개수 M 입력
M = int(input())
# DP 배열 선언 (각 크기에 대해 가능한 좌석 배치 경우의 수 저장)
dp = [0 for _ in range(101)]
# 기본적인 피보나치 초기값 설정 (1개 좌석일 때 1가지, 2개 좌석일 때 2가지 경우)
dp[0] = 1 # 빈 좌석 (계산 편의상 1로 설정)
dp[1] = 1 # [O] → 한 가지 방법
dp[2] = 2 # [OO], [XX] → 두 가지 방법
# DP를 이용해 n개의 좌석을 배치할 수 있는 경우의 수 계산
# 피보나치 수열을 따름: dp[i] = dp[i-1] + dp[i-2]
for i in range(3, 100):
dp[i] = dp[i - 1] + dp[i - 2]
# 현재 처리 중인 일반 좌석의 시작 위치
curr = 1
# VIP 좌석을 기준으로 나뉘는 구간을 계산
for _ in range(M):
VIP = int(input()) # VIP 좌석 위치 입력
ans *= dp[VIP - curr] # 일반 좌석 구간의 배치 경우의 수를 곱함
curr = VIP + 1 # 다음 구간의 시작 위치 갱신
# 마지막 VIP 이후 남은 일반 좌석 구간 처리
if curr != (N + 1):
ans *= dp[N + 1 - curr]
# 최종 가능한 좌석 배치 방법 수 출력
print(ans)
꽤 많이 헤맸다.. DP 더 파야겠다.. ㅠㅠ
반응형
'코테 > BOJ' 카테고리의 다른 글
백준 11563 [소인수 분해] 파이썬 (0) | 2025.03.14 |
---|---|
백준 1520 [내리막 길] 파이썬 (0) | 2025.03.12 |
백준 1495 [기타리스트] 파이썬 (0) | 2025.03.11 |
백준 2167 [2차원 배열의 합] 파이썬 (0) | 2025.03.11 |
백준 9328 [열쇠] 파이썬 (0) | 2025.03.11 |