728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/92341
문제 풀이 방법
- 단순 구현문제이다.
나는 class를 이용해 구현했다. - class를 이용해서 인지 다른 분이 작성한 코드보다 장황하고 길어졌다고 생각한다.
class는 적절한 상황에 사용해야 겠다.
내가 작성한 코드
class FeeSystem {
construct(car){
this.car = car;
this.inTime = [0, 0];
this.totalTime = 0;
}
in(inTime){
this.inTime = inTime;
}
out(outTime){
this.totalTime = (outTime[0] - this.inTime[0])*60 + (outTime[1] - this.inTime[1]) + this.totalTime;
this.inTime = [0, 0];
}
}
const feeCalc = (inTime, totalTime, basicTime, basicFee, extraTime, addFee) => {
if(inTime[0] === 0 && inTime[1] === 0){
return totalTime <= basicTime ? basicFee : basicFee + (Math.ceil((totalTime - basicTime)/extraTime) * addFee);
}
else{
const finalTime = (23 - inTime[0])*60 + (59 - inTime[1]) + totalTime;
return finalTime <= basicTime ? basicFee : basicFee + (Math.ceil((finalTime - basicTime)/extraTime) * addFee);
}
}
const solution = (fees, records) => {
let answer = [];
const [basicTime, basicFee, extraTime, addFee] = fees;
const recordsArr = records.map(e => e.split(' '));
let feeArr = [];
for(let i=0; i<recordsArr.length; i++){
const [h, m] = recordsArr[i][0].split(':');
if(recordsArr[i][2] === 'IN'){
const isExist = feeArr.find(e => e.car === recordsArr[i][1]);
if(isExist){
isExist.in([h, m]);
}
else{
const car = new FeeSystem();
car.construct(recordsArr[i][1]);
car.in([h, m]);
feeArr.push(car);
}
}
else{
const carData = feeArr.find(e => e.car === recordsArr[i][1]);
carData.out([h, m]);
}
}
feeArr.sort((a, b) => +a.car - +b.car);
feeArr.forEach(e => {
answer.push(feeCalc(e.inTime, e.totalTime, basicTime, basicFee, extraTime, addFee));
});
return answer;
}
다른 분이 작성한 코드
const solution = (fees, records) => {
let parkingTime = {};
records.forEach((e) => {
const [t, car, type] = e.split(' ');
const [h, m] = t.split(':');
const time = +h*60 + +m;
if(!parkingTime[car]) parkingTime[car] = 0;
if(type === 'IN') parkingTime[car] += (1439 - time);
if(type === 'OUT') parkingTime[car] -= (1439 - time);
})
const answer = [];
for (let [car, time] of Object.entries(parkingTime)) {
if (time <= fees[0]) time = fees[1];
else time = Math.ceil((time - fees[0]) / fees[2]) * fees[3] + fees[1]
answer.push([car, time]);
}
return answer.sort((a, b) => a[0] - b[0]).map(v => v[1]);
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 2Level / 완전탐색 / 땅따먹기 (0) | 2023.09.09 |
---|---|
[JS] 2Level / 완전탐색 / 요격 시스템 (0) | 2023.09.08 |
[JS] 2Level / 연습 문제 / 요격 시스템 (0) | 2023.09.06 |
[JS] 2Level / 2018 KAKAO BLIND RECRUITMENT / [3차] n진수 게임 (0) | 2023.08.24 |
[JS] 2Level / 연습문제 / 할인 행사 (0) | 2023.08.22 |