해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.
https://programmers.co.kr/learn/courses/30/lessons/17678
풀이 : 버스 시간을 숫자배열로 변환/저장 후 PriorityQueue를 통해 버스 탑승자를 점검한다. 제일 마지막에 타는 사람을 확인한다.
import java.util.*;
class Solution {
public String solution(int n, int t, int m, String[] timetable) {
int [] arr = new int [n];
arr[0] = 540;
for (int i = 1; i < arr.length; i++) {
arr[i] += arr[i-1] + t;
}
PriorityQueue <Integer> qu = new PriorityQueue<Integer>((a,b) -> a-b);
for(String str : timetable) {
int time = Integer.parseInt(str.substring(3));
time += Integer.parseInt(str.substring(0, 2)) * 60;
qu.add(time);
}
int last = 0;
for (int i = 0; i < arr.length; i++) {
last = arr[i];
for (int j = 0; j < m; j++) {
if(qu.isEmpty()) {
last = arr[i];
break;
}
else if(arr[i] >= qu.peek()) {
last = qu.poll();
if(j == m-1) last--;
}
}
}
return String.format("%02d:%02d", last/60, last%60);
}
}