#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
void parse_time(string &s, int *hour, int *min)
{
*hour = 0;
*min = 0;
for(int i = 0; i < 5; i++)
{
if (i < 2)
*hour = *hour * 10 + s[i] - '0';
else if ( i > 2)
*min = *min * 10 + s[i] - '0';
}
}
string solution(int n, int t, int m, vector<string> timetable) {
string answer = "";
vector<int> v;
int answer_int = 0;
for(int i = 0; i < timetable.size(); i++) // 시간을 int로 변환
{
int hour, min;
parse_time(timetable[i], &hour, &min);
v.push_back(hour * 60 + min);
}
sort(v.begin(), v.end());
int base_time = 9 * 60; // 09 : 00 시
int cur_idx = 0; //현재 사람
int available = m;
while (1)
{
if (v[cur_idx] > base_time || available == 0 || v.size() == cur_idx)//탈 사람이 없으면 or 만차이면 or 모든 사람을 태워버렸다면
{
n--; //다음버스
if (n == 0) //마지막 버스였다면
{
if (available != 0)// 자리가 있었다면
answer_int = base_time;
else //자리가 없었다면
answer_int = v[cur_idx - 1] - 1; //cur_idx는 0이 아닐 것이므로
break;
}
available = m; // 인원 가용수 초기화
base_time += t; // 다음시간
}
else
{
if (v[cur_idx] <= base_time) // 탈 사람이 있으면
{
available--; // 인원을 하나 줄이고
cur_idx++;// 다음인원으로 넘어간다.
}
}
}
if (answer_int / 60 < 10) // 역파싱
answer = '0';
answer.append(to_string(answer_int/ 60));
answer += ':';
if (answer_int % 60 < 10)
answer += '0';
answer.append(to_string(answer_int % 60));
return answer;
}
구현방법
HH:MM 형태로 되어있는 String 배열을 int형태로 바꿔서
내림차순으로 sort 한 후 시뮬레이션을 돌린다.
만약 마지막 버스에서 자리가 있었다면 마지막 버스의 출발시간이고,
자리가 없었다면 마지막으로 탄 사람보다 1분 일찍온다.