https://softeer.ai/practice/info.do?idx=1&eid=626
#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;
struct ReserveTime{
int startTime;
int endTime;
bool bCheck=false;
};
struct InTime{
int startTime;
int endTime;
bool bCheck =false;
};
int main(int argc, char** argv)
{
int n,m;
cin>> n>>m;
map<string,vector<ReserveTime>> roomName;
map<string,vector<InTime>> checkRoom;
vector<InTime> inTime;
for(int i=9;i<18;i++){
InTime tmpInTime;
tmpInTime.startTime=i;
tmpInTime.endTime=i+1;
inTime.push_back(tmpInTime);
}
for(int i=0;i<n;i++){
string tmpRoomName;
cin>>tmpRoomName;
checkRoom[tmpRoomName]=inTime;
}
for(int i=0;i<m;i++){
string tmpRoomName;
int startTime;
int endTime;
cin>>tmpRoomName;
cin>>startTime;
cin>>endTime;
ReserveTime tmpReserveTime;
tmpReserveTime.startTime=startTime;
tmpReserveTime.endTime=endTime;
roomName[tmpRoomName].push_back(tmpReserveTime);
}
for (auto it = roomName.begin(); it != roomName.end(); ++it){
vector<ReserveTime> tmpReserveTime=it->second;
for(int i=0;i<tmpReserveTime.size();i++){
for(int j=0;j<inTime.size();j++){
//vector<InTime> tmpInTime =checkRoom[it->first][0].time;
//cout<<checkRoom[it->first][j].time;
if( tmpReserveTime[i].startTime<=checkRoom[it->first][j].startTime&&checkRoom[it->first][j].endTime<=tmpReserveTime[i].endTime){
checkRoom[it->first][j].bCheck=true;
}
}
}
}
map<string,vector<string>>result;
bool bFirst=false;
bool bTime=false;
for (auto it = checkRoom.begin(); it != checkRoom.end(); ++it){
int startTime=99;
int endTime =0;
//cout<<"Room"<<" "<<it->first<<":"<<endl;
if(bFirst==false){
result[it->first].push_back("Not available");
bFirst=true;
}
for(int i=0;i<(it->second).size();i++){
if((it->second)[i].bCheck==false){
if(startTime>=(it->second)[i].startTime){
startTime=(it->second)[i].startTime;
//cout<<startTime<<",";
}
if(endTime<=(it->second)[i].endTime){
endTime=(it->second)[i].endTime;
//cout<<endTime<<endl;
}
if(i==(it->second).size()-1){
if(bTime==false){
result[it->first].pop_back();
bTime=true;
result[it->first].push_back("available:");
}
string tmpTime;
if(startTime==9){
//cout<<"09-";
tmpTime="09";
}else{
//cout<<startTime<<"-";
tmpTime=to_string(startTime);
}
tmpTime=tmpTime+"-"+to_string(endTime);
result[it->first].push_back(tmpTime);
}
}else{
if(startTime!=99||endTime!=0){
if(bTime==false){
result[it->first].pop_back();
bTime=true;
result[it->first].push_back("available:");
}
string tmpTime="";
if(startTime==9){
//cout<<"09-";
tmpTime="09-";
}else{
//cout<<startTime<<"-";
tmpTime=to_string(startTime)+"-";
}
tmpTime=tmpTime+to_string(endTime);
result[it->first].push_back(tmpTime);
}
startTime=99;
endTime =0;
}
}
bTime=false;
bFirst=false;
}
int count=0;
for( auto it= result.begin();it!=result.end();++it){
cout<<"Room"<<" "<<it->first<<":";
cout<<endl;
if(it->second.size()>1){
cout<<it->second.size()-1<<" ";
}
for(int i=0;i<it->second.size();i++){
cout<<it->second[i];
//if(i<it->second.size()-1){
cout<<endl;
//}
}
if(count!=result.size()-1){
cout<<"-----"<<endl;
}
count++;
}
return 0;
}
'알고리즘 공부' 카테고리의 다른 글
비밀 메뉴 (0) | 2023.03.02 |
---|---|
전광판 (0) | 2023.03.02 |
프로그래머스 -2019 KAKAO BLIND RECRUITMENT 오픈채팅방-연습문제 (0) | 2021.09.26 |
<UnionFind> 경로 연결 문제 (0) | 2021.05.20 |
for문으로 메모라이제이션 피보나치 수열 (0) | 2021.05.15 |