알고리즘&자료구조/문제

[BOJ] 2302 극장 좌석 C++

Nakuri 2023. 5. 15. 17:57
728x90

개요

https://www.acmicpc.net/problem/2302

 

2302번: 극장 좌석

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

www.acmicpc.net

 

그냥저냥 풀만한 DP문제다.

 

풀이

VIP를 기준으로 집단을 나누었다.

각 집단들의 경우의 수(피보나치 수)를 곱하면 모든 경우의 수를 구할 수 있다.

 

코드

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	cin.tie(0)->sync_with_stdio(0);
	int dp[41] = { 0, 1, 2 };
	int N, M;
	int result = 1;
	cin >> N >> M;
	for (int i = 3; i < 41; i++)
		dp[i] = dp[i - 1] + dp[i - 2];

	int lastVip = 0;
	while (M--)
	{
		int vip;
		cin >> vip;
		if(vip - lastVip - 1 > 0)
			result *= dp[vip - lastVip - 1];
		lastVip = vip;
	}
	if(N != lastVip)
		result *= dp[N - lastVip];
	cout << result;
}

'알고리즘&자료구조 > 문제' 카테고리의 다른 글

[BOJ] 1149 RGB거리 C++  (0) 2023.05.15
[BOJ] 4811 알약 C++  (0) 2023.05.15
[BOJ] 9372 상근이의 여행 C++  (0) 2023.03.28
[BOJ] 1238 파티 C++  (0) 2023.03.07
[BOJ] 5972 택배 배송 C++  (0) 2023.03.06