문제 이름 : 주차 요금 계산
<<< 문제 내용 >>>
문제의 내용이 굉장히 길기 때문에
https://programmers.co.kr/learn/courses/30/lessons/92341 을 참고하세요.
function solution(fees, records) {
let answer = [];
const toMinute = (index) => {
index = index.split(':').map(Number);
return index[0]*60+index[1];
}
let carInfo = {};
let allPkTime = {};
records.map((el, i)=>{
let info = el.split(' ');
if(info[2] === 'IN'){
carInfo[info[1]] = info[0];
}else{
const outTime = toMinute(info[0]);
const inTime = toMinute(carInfo[info[1]]);
const parkingTime = outTime - inTime;
if(info[1] in allPkTime){
allPkTime[info[1]] += parkingTime;
}else{
allPkTime[info[1]] = parkingTime;
}
delete carInfo[info[1]];
}
})
for(const i of Object.entries(carInfo)){
const lastTime = toMinute("23:59");
const inTime = toMinute(i[1]);
const parkingTime = lastTime - inTime;
if(i[0] in allPkTime){
allPkTime[i[0]] += parkingTime;
}else{
allPkTime[i[0]] = parkingTime;
}
}
allPkTime = Object.entries(allPkTime);
allPkTime.sort((a,b)=> a[0] - b[0]).map((el)=>{
const parkingTime = (el[1] - fees[0])%fees[2] === 0 ?
Math.floor((el[1] - fees[0])/fees[2]) : Math.floor((el[1] - fees[0])/fees[2])+1;
if(parkingTime<0){
answer.push(fees[1]);
}else{
answer.push(fees[1] + (parkingTime*fees[3]));
}
});
return answer;
}
* 카카오 2022 블라인드 채용 문제 중 하나였다.
구현 문제였고, 특별한 알고리즘이 들어가는 것은 아니어서 많이들 다른 방식으로 푼 것 같았다.
블라인드 채용 때 파이썬으로 이 문제를 풀었었는데 그땐 나름 빠르게 풀었었다.
한참이 지나고서야 js로 다시한번 풀어보았는데 음.. 생각보다 오래걸려버렸다.
아마 그 이유는 문제 내용을 한번 풀어봤던거니 대충 읽고 넘어가서, 열심히 코딩하고 조건을 고려하지 않는
구현에서는 가장 치명적인 문제를 거듭했다..
그래도 여기서 배우게된건 구현할때는 먼저 모든 조건을 정리해두고 시작하는게 좋다는 것이다.
+ 나는 요즘 간단하게 단발성으로 메모할 수 있는 전자노트를 이용하고 있다.
광고는 아니고 다이소에서 싸게 5천원이면 구매할 수 있다.
필기감도 괜찮아서, 문제풀 때 유용하게 쓰일 수 있으니 아이패드나 갤럭시 탭 등이 없다면 고려해볼만 하다.
장점은 너무너무 가볍고, 단점은 불끄면 안보이는 정도..?
도움이 되셨다면 공감 부탁드립니다.