
처음엔 문제 이해하는게 젤 어려웠다.
요약하자면, 아침 9시부터 셔틀버스가 직원을 회사로 데려다 주는데, 셔틀 버스의 갯수와, 배차 간격, 한 번에 탑승 가능한 인원이 정해져 있다.
이때 최대한 마지막에 탈 수 있는 경우를 구하면 된다.
전날에 타려고 대기하는 사람은 없고,, 한번에 여러 사람이 대기하는 경우를 유의하면서 풀면 된다.

우선 데이터 타입이 문자로 오기 때문에, 정렬하기 쉬운 숫자 타입으로 바꾸는 함수와, 숫자 값을 시간을 바꾸는 함수를 각각 만들었다.
이후 마지막 통학버스에 자리가 남는다면 막차 도착시간에 맞춰서 가면 된다.
1. 이를 위해서 lastBus 변수를 만들어서 막차 시간을 구했다.
2. 그리고 한번에 탑승할 수 있는 인원수가 총 크루보다 많다면 무조건 막차에 타면 된다.
3. 다른 크류가 없다면 막차에 타면 된다.
4. 이후 막차 이후에 도착한 사람들은 제거하고, 시간을 분으로 교체한 후 오름차순으로 사람들을 정렬했다.
결국 우리는 마지막 도착하는 인원보다 빨리 도착하면 탈 수가 있다.
즉 마지막에 도착하는 사람을 구해주면 된다.
1. 만약 이번에 탑승할 사람이 버스 도착시간 이하로 도착했다면 탑승한다
2. 만약 현재 버스에 못 타면 다음 버스에 탈 수 있어야 한다.
이를 기반으로 마지막에 도착하는 사람을 구하기 위해선 index를 사용하는게 적합하다고 생각했다.
n번 쨰 가 왔을 때 해당 버스의 도착 시간을 구하고, crew들의 도착시간을 비교하여 탑승할 수 있는 경우에 태운다.
이중 반복문에서 m번만큼 반복해 자리가 있는 경우 승객을 계속 태운다.
1. 남은 승객이 없는 경우에는 무조건 막차에 타면 된다.
2. 만약 마지막 칸이 다 찼따면, 해당 크류의 도착시간을 반환하고 1분 일찍 도착하도록 한다.
function solution(n, t, m, timetable) {
// 막차시간
const lastBus = 540 + (n - 1) * t;
// 무조건 탈 수 있는 경우 막차탐
if (m > timetable.length) {
return timeConverter(lastBus);
}
if (totalCrew === 0) {
return timeConverter(lastBus);
}
// 막차 이후의 사람들은 제거하고 오름차순 정렬
const minuteTable = timetable
.map((e) => minuteConverter(e))
.filter((e) => e <= lastBus)
.sort((a, b) => a - b);
let currentIndex = 0;
const totalCrew = minuteTable.length;
for (let i = 0; i < n; i++) {
const busTime = 540 + i * t;
for (let j = 1; j <= m; j++) {
// 현재 크루가 이번 버스보드 늦는 경우
if (minuteTable[currentIndex] > busTime) {
break;
}
// 현재 크류
if (i === n - 1 && j === m) {
return timeConverter(minuteTable[currentIndex] - 1);
}
if (currentIndex === totalCrew - 1) {
return timeConverter(lastBus);
}
currentIndex++;
}
}
}
function minuteConverter(value) {
const [hour, minute] = value.split(':').map(Number);
return hour * 60 + minute;
}
function timeConverter(value) {
const hour = parseInt(value / 60);
const minute = value % 60;
const stringMinute = minute < 10 ? '0' + minute : minute;
return hour < 10
? '0' + hour + ':' + stringMinute
: hour + ':' + stringMinute;
}
'알고리즘 문제풀이' 카테고리의 다른 글
node 1005 ACM Craft 풀이 (0) | 2024.04.13 |
---|---|
자바스크립트 카카오 징검다리 건너기 문제 (프로그래머스) (1) | 2024.02.12 |
백준 1019 책페이지 (자바스크립트 , Node.js) (3) | 2023.12.04 |
백준 1119번 그래프 (Node.js) (0) | 2023.12.04 |
Node.js 알고리즘에 사용할 우선순위큐 만들기 (0) | 2023.11.24 |