https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=javascript
그렇게 어렵지는 않고 그냥 루프 돌면서 계산하면 되고, 최종 결과는 자동차 번호대로 정렬해서 나가야 하기 때문에 두번 루프 돌림.
모든 프로그래머스 문제 관련 코드들은 https://github.com/crazydj2/programmers 에 있음.
const calculateTime = (inTime, outTime) => {
const [inHour, inMin] = inTime.split(':');
const [outHour, outMin] = outTime.split(':');
return ((parseInt(outHour) * 60) + parseInt(outMin)) - ((parseInt(inHour) * 60) + parseInt(inMin));
};
function solution(fees, records) {
const [basicTime, basicFee, unitTime, unitFee] = fees;
const map = new Map();
records.map(record => {
const [time, number, method] = record.split(' ');
let info = map.get(number);
if (!info) {
info = { totalTime: 0 };
}
if (method === 'IN') {
info.inTime = time;
map.set(number, info);
return;
}
info.totalTime += calculateTime(info.inTime, time);
info.inTime = null;
map.set(number, info);
});
return [...map.keys()].sort((k1, k2) => k1 - k2).map(key => {
const info = map.get(key);
if (info.inTime) {
info.totalTime += calculateTime(info.inTime, '23:59');
}
let totalFee = 0;
let totalTime = info.totalTime;
totalFee += basicFee;
totalTime -= basicTime;
if (totalTime > 0) {
totalFee += (Math.ceil(totalTime / unitTime) * unitFee);
}
return totalFee;
});
}