코딩테스트 연습 - [1차] 셔틀버스 | 프로그래머스 스쿨
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
특별한 알고리즘을 쓰기보다는 구현을 잘 하면 되는 문제인것같다.
우선은 주어진 timetable 배열을 숫자로 파싱하고 정렬한다.
그 다음 버스가 한대씩 들어와서 사람들을 태우고 간다.
버스는 대기열 맨 앞부터 한명씩 사람을 태운다.
만약 버스가 정류장에 도착한 시각보다 늦은 사람이 있다면 태우지 않고 즉시 떠난다.
또는, 정류장에 더이상 태울 사람이 없는 경우에도 즉시 떠난다.
모든 버스가 떠났을 때, 버스가 가득 찼다면 맨 마지막에 탄 사람보다 1분 먼저 대기해야한다.
만약 버스가 가득 차지 않았다면 마지막 버스의 출발 시각에 맞춰서 대기하면 된다.
코드
function solution(n, t, m, timetable) {
var answer = '';
var queue = [];
for (var i = 0; i < timetable.length; i++) {
const [h, m] = timetable[i].split(':');
queue.push(+h * 60 + +m);
}
queue.sort((a, b) => a - b);
var p = 0;
for (var i = 0; i < n; i++) {
var time = 540 + i * t; // 현재 버스 시간
var ride = 0;
for (ride = 0; ride < m; ride++, p++) {
// 버스에 최대 m명 태움
if (queue[p] > time)
// 못 타는 사람
break;
if (p >= queue.length)
break;
}
if (i === n - 1) {
// 마지막 버스였음
if (ride === m) {
// 버스가 꽉참
time = queue[p - 1] - 1;
}
answer = `${String(Math.floor(time / 60)).padStart(2, '0')}:${String(time % 60).padStart(2, '0')}`; }
}
return answer;
}
결과

후기
생각보다 구현하기 어려웠다. 어떤 변수를 선언하고 어떤 조건문을 걸어야하는지 생각하려니 어지러웠다.
'코딩연습' 카테고리의 다른 글
| (javascript) 최고의 집합 (0) | 2025.05.13 |
|---|---|
| (javascript) 올바른 괄호의 갯수 (0) | 2025.05.11 |
| (javascript) 거스름돈 (0) | 2025.05.01 |
| (javascript) 입국심사 (0) | 2025.04.29 |
| (javascript) 불량 사용자 (0) | 2025.04.22 |