<< 문제 >>
https://school.programmers.co.kr/learn/courses/30/lessons/155651
핵심적인 개념은 "같은시간 내에 몇 개의 방을 사용하는가?" 입니다.
그래서 시간에 따라 정렬하고 입장은 + 퇴장은 - 를 통해 이 값이 최대가 되는 경우가 답입니다.
저는 15:00 -> 900 이렇게 분 단위로 전환해서 입/퇴장 여부를 pair에 담고 vector로 묶어 정렬했습니다.
그냥 map을 쓰면 되는거 아니냐 하실 수 있는데,,, map은 중복을 허용하지 않기 때문에 그렇습니다.
multimap을 쓸 수도 있지만 그냥 vector를 활용하는게 더 직관적이라 그렇게 했습니다.
<< 코드 >>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<string>> book_time) {
int answer = 0;
vector<pair<int, string>> timeStamps;
int min;
for(auto& time : book_time){
pair<int, string> timeStamp;
for(int i=0; i<2; i++){
min = 0;
min += stoi(time[i].substr(0,2)) * 60;
min += stoi(time[i].substr(3,2));
if(i == 0){ // 입장시간
timeStamp.first = min;
timeStamp.second = "입장";
}
else{
timeStamp.first = min + 9; // 청소시간까지 고려
timeStamp.second = "퇴장";
}
timeStamps.push_back(timeStamp);
}
}
sort(timeStamps.begin(), timeStamps.end());
int usingRoom = 0;
for(auto& p : timeStamps){
if(p.second == "입장"){
usingRoom++;
}
else if(p.second == "퇴장"){
usingRoom--;
}
if(usingRoom > answer){
answer = usingRoom;
}
}
return answer;
}
<< 깃허브 >>
[Level2.] 할인 행사 C++ (0) | 2024.03.02 |
---|---|
[Level1.] 둘만의 암호 C++ (0) | 2024.03.01 |
[Level2.] 튜플 C++ (0) | 2024.02.22 |
[Level2.] 숫자 변환하기 C++ (0) | 2024.02.18 |
[Level1.] 예산 C++ (0) | 2024.02.15 |
댓글 영역