https://softeer.ai/practice/info.do?idx=1&eid=626 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

#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;
}

+ Recent posts