프로그래머스/2레벨
[프로그래머스 2레벨] 호텔 대실 (C++)
게임개발기원
2025. 2. 17. 22:47
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<vector<string>> book_time) {
int answer = 0;
vector<pair<int, int>>v;
for (auto i : book_time)
{
int s = stoi(i[0].substr(0, 2)) * 60 + stoi(i[0].substr(3, 2));
int e = stoi(i[1].substr(0, 2)) * 60 + stoi(i[1].substr(3, 2)) + 10;
v.push_back({s, e});
}
sort(v.begin(), v.end());
priority_queue<int, vector<int>, greater<int>> pq; //빨리 끝나는 시간 기준
for(int i=0; i<v.size(); i++)
{
if(!pq.empty() && pq.top() <= v[i].first) pq.pop(); //이어서 가능
pq.push(v[i].second); //새로운 시간대 추가
}
answer = pq.size();
return answer;
}
시작 시간과 끝나는 시간을 계산하여 벡터에 담아준다.
이를 시작 시간 빨리 끝나는 순으로 정렬을 하고, 또 빨리 끝나는 시간 기준으로 pq를 선언해준다.
이후 벡터 값을 돌면서, pq에 기본적으로 끝나는 시간대를 넣어준다.
그리고 pq.top() 값을 체크하여 이 값이 시작하는 시간대보다 작거나 같다면 기존 pq 값을 제거 해준다.
이렇게 계산한 최종 pq 사이즈를 출력해주면 된다.