성우리뷰
셔틀버스
두원공대88학번뚜뚜
2021. 9. 24. 22:14
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int changer(string str) {
int hour = stoi(str.substr(0,2));
int min = stoi(str.substr(3, 2));
return hour*60 + min;
}
string solution(int n, int t, int m, vector<string> timetable) {
string answer = "";
vector<int> timev;
for(auto a: timetable) {
//시간 정수 변환
timev.push_back(changer(a));
}
sort(timev.begin(), timev.end());
//출발시간부터 점차
int start = 540; //오전9시부터
int idx = 0; //인간 가리킴
int seat = m; //남은 좌석
int ans = 0;
//무조건 맨 마지막버스에 타야됨
for(int i=0; i<n; i++) {
seat = m;
for(int j = idx; j<timev.size(); j++) {
//사람도착시간 <= 버스출발시간+(회차)*시간
if(timev[j] <= start+(i)*t) {
idx++; //다음사람
seat--; //좌석 1개 감소
if(seat == 0) break; //만약 좌석 없어지면, 버스 앉을데 없음
}
}
//맨마지막버스
if(i == n-1) {
//다 찼으면, 무조건 맨마지막놈보다 1분빨리
//다 안찼으면, 걍 버스출발시간에 오면됨
if(seat == 0) {
ans = timev[idx-1]-1;
}
else {
ans = start+(i)*t;
}
}
}
//다시 시간으로 되돌리기
int hour = ans/60;
int min = ans%60;
if(hour >= 10) {
answer += to_string(hour);
}
else {
answer += '0';
answer += to_string(hour);
}
answer+=':';
if(min >=10) {
answer += to_string(min);
}
else {
answer += '0';
answer += to_string(min);
}
return answer;
}