https://school.programmers.co.kr/learn/courses/30/lessons/92341
function solution(fees, records) {
// recors 재배열
records = records.map((a) => a.split(" ")).sort((a, b) => a[1] - b[1]);
const minutes = {};
while (records.length) {
const [time, carNum, inOrOut] = records.shift();
// 들어왔으면 들어온 시간을 분으로 바꾼 뒤 23:59 를 분으로 바꾼 1439에서 빼주고 해당 minutes 에 더해줌
if (inOrOut === "IN") {
const entranceTime = time;
const minuteOfUse = 1439 - minuteConverter(entranceTime);
if (minutes[carNum]) {
minutes[carNum] += minuteOfUse;
} else minutes[carNum] = minuteOfUse;
// 나갔으면 들어온 나간 시간을 분으로 바꾼 뒤 23:59 를 분으로 바꾼 1439에서 빼주고 해당 minutes에서 빼줌
} else {
const getOutTime = time;
const minuteOfUse = 1439 - minuteConverter(getOutTime);
if (minutes[carNum]) {
minutes[carNum] -= minuteOfUse;
} else minutes[carNum] = minuteOfUse;
}
}
// minutes를 차넘버 순으로 정렬
const sortedMinute = Object.entries(minutes)
.sort((a, b) => a[0] - b[0])
.map((a) => a[1]);
// 요금 계산 돌리기
const rates = sortedMinute.map((a) => rateCalculator(a, fees));
return rates;
}
const minuteConverter = (time) => {
const [hour, minute] = time.split(":").map(Number);
return hour * 60 + minute;
};
const rateCalculator = (minute, fees) => {
const [baseMinute, baseRate, unitMinute, unitRate] = fees;
if (minute <= baseMinute) return baseRate;
else {
const overTime = minute - baseMinute;
const overRate = unitRate * Math.ceil(overTime / unitMinute);
return baseRate + overRate;
}
};