Algorithm/프로그래머스
2022 KAKAO BLIND RECRUITMENT) 주차 요금 계산
choogro
2022. 8. 4. 14:32
https://school.programmers.co.kr/learn/courses/30/lessons/92341?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
분할 정복(Divide and conquer algorithm)을 이용하여 문제에서 구해야할 값들을 세분화 시킬 수 있습니다.
1. 주차 시간
2. 주차 시간을 요금으로 환산
3. 정렬
function solution(fees, records) {
var answer = [];
const check = new Map();
const sum = new Map();
// 주차 요금 계산
function calculate(feesArr, totalTime) {
const minTime = feesArr[0];
const minFee = feesArr[1];
const unitTime = feesArr[2];
const unitFee = feesArr[3];
return (
minFee +
Math.ceil((totalTime > minTime ? totalTime - minTime : 0) / unitTime) *
unitFee
);
}
// 개별 주차 시간
records.forEach((info) => {
info = info.split(" ");
const minutes = info[0].slice(0, 2) * 60 + Number(info[0].slice(3, 5));
if (check.has(info[1]) && info[2] === "OUT") {
if (sum.has(info[1]))
sum.set(info[1], sum.get(info[1]) + minutes - check.get(info[1])[0]);
else sum.set(info[1], minutes - check.get(info[1])[0]);
check.delete(info[1]);
} else check.set(info[1], [minutes, info[2]]);
});
[...check.keys()].forEach((v) =>
sum.set(v, sum.get(v) + 1439 - check.get(v)[0] || 1439 - check.get(v)[0])
);
// 정렬
answer = [...sum.keys()]
.sort((a, b) => a - b)
.map((v) => calculate(fees, sum.get(v)));
return answer;
}