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
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 표편집 (1) | 2024.09.30 |
---|---|
[JS] 파괴되지 않은 건물 (0) | 2024.09.29 |
[JS] 비밀지도 (0) | 2024.09.27 |
[JS] 숫자 문자열과 영단어 (0) | 2024.09.27 |
[JS] 3 x n 타일링 (0) | 2024.09.20 |