성우리뷰

셔틀버스

두원공대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;
}