코딩테스트 문제풀이/프로그래머스
[프로그래머스] 셔틀버스
itaeiou
2022. 3. 17. 15:18
반응형
17678 셔틀버스
https://programmers.co.kr/learn/courses/30/lessons/17678
20220317 javascript 풀이
function solution(n, t, m, timetable) {
let time = timetable.sort().map(vt => vt.split(':').map(vn => parseInt(vn)) )
let hour = 9, minute = 0;
for(let k=0; k<n-1; k++) {
time = time.filter((v, i) => ( i>=m || timeComp(v, [hour, minute]) ));
hour += Math.floor((minute+t) / 60);
minute = (minute+t) % 60;
}
if(time.length < m) {
return printTime(hour, minute);
}
else if(timeComp(time[m-1], [hour, minute])) {
return printTime(hour, minute);
} else {
hour = time[m-1][0];
minute = time[m-1][1] - 1;
if(minute < 0) {
hour -= 1;
minute += 60;
}
return printTime(hour, minute);
}
}
// t1이 크면 true
// 같으면 true
// t2가 크면 false
const timeComp = (t1, t2) => {
if(t1[0] > t2[0]) return true;
else if(t1[0] == t2[0] && t1[1] > t2[1]) return true;
else false;
}
const printTime = (hour, minute) => {
let printH = hour < 10 ? `0${hour}` : hour;
let printM = minute < 10 ? `0${minute}` : minute;
return `${printH}:${printM}`;
}
단순 구현으로 풀었던 문제
timetable을 정렬하고, 버스에 타지 못한 사람만 남긴다.
마지막 셔틀버스에 남은 사람만 비교해서
모두 탈 수 있으면 버스 도착시간
모두 탈 수 없다면 m번째 사람보다 -1분을 출력한다.
time을 오브젝트로 잡고 구현했다면 좀 더 깔끔했을 것 같다.
반응형