https://school.programmers.co.kr/learn/courses/30/lessons/92341
function solution(fees, records) {
const obj = {}
// [1]. 차량번호를 키값으로, 입출차 내역을 배열에 담아 밸류로 저장한다.
for (record of records){
let [time, num, inOut] = record.split(' ')
time = time.split(':').map(v=>Number(v))
const totalMin = time[0]*60 + time[1]
if (obj[num]) obj[num] = [...obj[num], totalMin]
else obj[num] = [totalMin]
}
// [2]. 저장된 obj를 순회하며, 총 주차시간을 계산하고, 총 요금을 계산한다.
const maxV = 24*60 - 1
for (key in obj){
// [2-1]. 입출차 내역 담긴 배열을 순회하면서 총 주차시간 계산.
const values = obj[key]
let total = 0
values.forEach((val, idx)=>{
if (idx%2) return // 짝수번째만 봄
if (values[idx+1]) total += (values[idx+1]-val)
else total += (maxV-val)
})
// [2-2]. 총 주차시간을 가지고, 총 요금을 계산
const [freeTime, defaultFee, min, fee] = fees.map(v=>Number(v))
const remain = total-freeTime
if (remain <=0){
obj[key] = defaultFee
continue
}
const calcFee = Math.ceil(remain/min)*fee + defaultFee
obj[key] = calcFee
}
// [3]. 객체를 배열로 바꿔서, 정렬하고 요금 출력
let arr = Object.entries(obj) // [[차번호, 총요금],[차번호, 총요금],[],[]]
arr = arr.sort((a,b)=>a[0]-b[0]).map(v=>v[1])
return arr;