🖇️ 문제 링크
📝 문제 분석
00 : 00에서 23 : 59 사이의 시각이 입력으로 들어온다.
cnt[180] = 03:00에 대기열에 도착하는 사람의 수
0분부터 1440분까지 대기열을 배열에 저장해둔다.
for(int i = 0; i < n; i++) { // 총 n회 운영
int remain = m;
while(cnt[cur] < remain && cur <= (t * i) + 540) {
remain -= cnt[cur];
cur++;
}
// 버스에 자리가 없어서 못 타는 경우
if(cur <= (t * i) + 540)
cnt[cur] -= remain;
// cur분에 셔틀 버스를 못타는 경우가 생겼기 때문에, (cur - 1)분에 도착해야 탈 수 있다.
answer = cur - 1;
}
540분부터 (540 + t) - (540 + 2 * t) .. 이렇게 배차가 있고, 빨리 온 순서대로 셔틀버스에 태운다.
셔틀버스 정원보다 대기열이 많다면, 정원만큼만 태우고 나머지는 다시 대기열에 넣는다.
⌨️ 코드
class Solution {
public String solution(int n, int t, int m, String[] timetable) {
int cur = 0;
int answer = 0;
int[] cnt = new int[24 * 60]; // 하루 24시간을 분으로 환산
// 각 분에 몇명이 기다리는지 저장
for (String s : timetable) {
char[] ch = s.toCharArray();
int minute = (ch[3] - '0') * 10 + (ch[4] - '0') + ((ch[0] - '0') * 10 + (ch[1] - '0')) * 60;
cnt[minute]++;
}
for(int i = 0; i < n; i++) { // 총 n회 운영
int remain = m;
while(cnt[cur] < remain && cur <= (t * i) + 540) {
remain -= cnt[cur];
cur++;
}
// 버스에 자리가 없어서 못 타는 경우
if(cur <= (t * i) + 540)
cnt[cur] -= remain;
// cur분에 셔틀 버스를 못타는 경우가 생겼기 때문에, (cur - 1)분에 도착해야 탈 수 있다.
answer = cur - 1;
}
return String.format("%02d:%02d", answer / 60, answer % 60);
}
}
Uploaded by Notion2Tistory v1.1.0