[BOJ] [1차] 셔틀버스

Date:

[BOJ] [1차] 셔틀버스

Problem URL : [1차] 셔틀버스

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

string getTime(int time) {
    string answer = "";
    if (time <= 9)
        answer += "0" + to_string(time);
    else
        answer += to_string(time);
    return answer;
}

string solution(int n, int t, int m, vector<string> timetable) {
    string answer = "";
    int standingTime = 0;

    vector<int> times;
    for (auto& time : timetable)
        times.push_back(stoi(time.substr(0, 2)) * 60 + stoi(time.substr(3, 2)));

    sort(times.begin(), times.end());

    int idx = 0;
    int busTime = 540; // 09:00
    int size = times.size();
    for (int bus = 1; bus <= n; bus++) {
        int num = 0;
        while (num < m && idx < size) {
            if (times[idx] <= busTime) {  // 현재 버스 시각보다 빨리 줄섰을 때
                num++;
                idx++;
            }else {
                break;
            }
        }
        
        if (bus == n) {
            if (num < m)
                standingTime = busTime;  // 탈 수 있는 크루가 m명보다 작으면 여유있게 busTime에 타면 된다.
            else
                standingTime = times[idx - 1] - 1;  // 탈 수 있는 크루가 m명이상이면, m번째 인원보다는 1분 빨리 줄 서야 한다.
        }
        busTime += t;
    }
  
    int hours = standingTime / 60;
    answer = getTime(hours);
    answer += ":";
    int minutes = standingTime % 60;
    answer += getTime(minutes);

    return answer;
}

Comments

카카오 문제답게 구현문제이다.

댓글