- timetable 오름차순 정렬
- bus의 start타임과 max인원을 담은 객체 생성
- 생성한 객체와 순차대로 timetable비교
3.1 버스도착시간보다 기다리는 사람들의 시간이 더 작으면 timeIdx++
3.2 버스도착시간보다 기다리는 사람들의 시간이 더 크면 그냥 보냄- ⭐️마지막버스가 핵심!!
4.1 마지막 버스중 기다리는 손님들을 다 태웠을때 자리가 남아있다면 마지막 버스
const minusTime = (str)=>{
let result = "";
let [hour, minute ] = str.split(':');
minute = parseInt(minute)-1;
hour = parseInt(hour);
if(minute < 0){
minute = minute+60;
hour = hour-1;
if(hour<10){
hour = `0${hour}`
}
if(minute<10){
minute = `0${minute}`
}
result = `${hour}:${minute}`
}else{
if(hour<10){
hour = `0${hour}`
}
if(minute<10){
minute = `0${minute}`
}
result = `${hour}:${minute}`
}
return result;
}
const compareTime = (str1, str2) =>{
let a = parseInt(str1.replace(":",0));
let b = parseInt(str2.replace(":",0));
if(a >= b) return true;
else return false;
}
const getTime = (str, dif) =>{
let result = "";
let [hour , minute] = str.split(':');
hour = parseInt(hour)
minute = parseInt(minute) + dif;
if(minute >= 60){
minute -= 60;
hour+=1;
if(hour<10){
hour = `0${hour}`
}
if(minute<10){
minute = `0${minute}`
}
result = `${hour}:${minute}`
}else{
if(hour<10){
hour = `0${hour}`
}
if(minute<10){
minute = `0${minute}`
}
result = `${hour}:${minute}`
}
return result
}
function solution(n, t, m, timetable) {
var answer = '';
let bus = [];
let time = 0;
let startTime = '09:00'
for(var i =0; i<n; i++){
bus.push({
start: startTime,
max : m
})
startTime = getTime(startTime, t);
}
timetable.sort((a,b)=>{
return parseInt(a.replace(':',0)) - parseInt(b.replace(":",0))
});
let timeIdx = 0;
let wait = [];
for(var i =0; i<bus.length; i++){
let val = bus[i];
// 마지막 버스일 경우
if(i === bus.length-1){
let stack = []
while(timeIdx < timetable.length && compareTime(val.start, timetable[timeIdx]) && val.max !== 0){
stack.push(timetable[timeIdx]);
timeIdx++;
val.max-=1
}
// console.log(stack)
if(val.max > 0){
time = val.start
}else{
time = minusTime(stack.at(-1))
}
break;
}
while(timeIdx < timetable.length && compareTime(val.start, timetable[timeIdx]) && val.max !== 0){
timeIdx++;
val.max-=1;
}
}
return (time)
}
주어진 조건을 천천히 따지고 마지막버스가 핵심인 것 만 조심하면 금방 풀린다!