객체, new Date()를 이용하여, 우선 각 차량별로 IN, Out시간을 계산하여, 차량별 이용시간을 구하자. 차량별 이용시간을 구한다음, fees 배열을 이용하여 주차요금을 계산하자.
function solution(fees, records) {
var answer = [];
var recordObj = {};
let timeObj = {};
let newObj = {};
records = records.map((data)=>data.split(' '));
records.map((d,i)=>{
if(recordObj[d[1]] == undefined && d[2] === 'IN'){
let day = new Date(`2023-03-16 ${d[0]}:00`)
recordObj[d[1]] = [day]
}else{
let day = new Date(`2023-03-16 ${d[0]}:00`)
recordObj[d[1]] = [...recordObj[d[1]], day]
}
})
let entries = Object.entries(recordObj);
entries.map((data)=>{
let val = data[1];
if(val.length %2 ===0){
let time = 0;
for(var i =0; i<val.length; i+=2){
let timeDiff = val[i+1].getTime() - val[i].getTime();
let min = timeDiff / (60 * 1000);
time+=min;
}
timeObj[data[0]] = time;
}else{
val.push(new Date('2023-03-16 23:59:00'));
let time = 0;
for(var i =0; i<val.length; i+=2){
let timeDiff = val[i+1].getTime() - val[i].getTime();
let min = timeDiff / (60 * 1000);
time+=min;
}
timeObj[data[0]] = time;
}
})
let key = Object.keys(timeObj).sort();
key.map((d)=>{
let time = timeObj[d];
time -= fees[0];
if(time <= 0){
answer.push(fees[1])
}else{
let money = fees[1] + Math.ceil(time/fees[2])*fees[3];
answer.push(money);
}
})
return answer;
}
이번 문제는 해결방법이 바로 생각났다. 그래서 천천히 풀었다. 여기서 하나 알게된 점은 객체를 저장할때 넣은 순서와 상관없이, 정렬되어 추가된다는 점이다. 또한 new Date()를 이용하여 시간을 구하면 더욱더 간단하고 정확하게 시간차이를 구할 수 있다.