코딩 테스트/프로그래머스 코딩 테스트 연습
[JS] 셔틀버스
58청춘
2024. 9. 28. 00:44
728x90
문제
풀이
수학적으로 접근식을 생각하며 괜찬은 문제이다. 이 문제의 답은 결국 탑승 가능한 마지막 시간을 출력해야하기 때문에 대기 인원과 현재 시간을 중점으로 생각하면 점화식이 나오게된다.
시간을 오름차순으로 정렬했으며 각 시간마다 승객들을 탑승가능 인원수 만큼 shift() 해주었으며, 마지막 타임에 대기 인원의 유무와 대기 인원이 온 시간을 종합하여 답을 도출했다.
코드
function solution(n, t, m, timetable) {
const arriveTimes = Array.from({ length: n }, (_, i) => 9 * 60 + (i * t));
const sortedTime = timetable.map(e => {
const [hour, minute] = e.split(':');
return +hour * 60 + +minute;
}).sort((a, b) => a - b);
for (let i = 0; i < arriveTimes.length; i++) {
const cur = arriveTimes[i];
const p = sortedTime.filter(e => e <= cur);
const cnt = p.length > m ? m : p.length;
if (i === arriveTimes.length - 1) {
if (cnt < m) {
const hour = Math.floor(cur / 60);
const minute = cur % 60
return `${hour < 10 ? '0' + hour : hour}:${minute < 10 ? '0' + minute : minute}`;
}
else {
const target = p[m - 1] - 1;
const hour = Math.floor(target / 60);
const minute = target % 60
return `${hour < 10 ? '0' + hour : hour}:${minute < 10 ? '0' + minute : minute}`;
}
}
for (let j = 0; j < cnt; j++) {
sortedTime.shift();
}
}
}
728x90