https://school.programmers.co.kr/learn/courses/30/lessons/92341
0. getTime ํจ์
๋ฌธ์์ด ํ์์ผ๋ก ์ฃผ์ด์ง ์ซ์๋ฅผ ์ ์๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ ์ ์ ์ํ๋ค.
1. ๋์ ์ฃผ์ฐจ์๊ฐ ๊ตฌํ๊ธฐ
records ๊ธฐ๋ก์ ๋๋ฉฐ ๊ฐ ์ฐจ๋์ ๋์ ์ฃผ์ฐจ์๊ฐ์ ๊ตฌํ๋ค.
์ ์ฐจ -> ์ ์ฐจ์๊ฐ ๊ธฐ๋ก (lastIn)
์ถ์ฐจ -> ์ถ์ฐจ์๊ฐ - ์ ์ฐจ์๊ฐ ๋ํด์ฃผ๊ธฐ (totalTime)
์ด๋, ์ ์ฐจ๋ง ๋๊ณ ์ถ์ฐจ๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ถ์ฐจ๋ฅผ ์์ผฐ๋ค๋ฉด ์ ์ฐจ๊ธฐ๋ก์ deleteํด์ค๋ค!
2. ์ถ์ฐจ ์ํ ์ฐจ๋๋ค ์ฒ๋ฆฌ
์ถ์ฐจ๊ฐ ๋์์ผ๋ฉด lastIn์ ์กด์ฌํ์ง ์๋๋ค. ๋ฐ๋ผ์ lastIn์ ์ํํ๋ฉฐ 23:59 - ์ ์ฐจ์๊ฐ ์ ๋์ ์๊ฐ์ ๋ํด์ค๋ค
3. ์๊ธ ๊ณ์ฐ
totalTime์ ์ํํ๋ฉฐ ๊ฐ ์๋์ฐจ๋ณ ๋์ ๊ธ์ก์ ๊ตฌํด์ ans ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค
4๋ฒ๊ณผ์ ์์ ์ ๋ ฌ์ ํด์ค์ผํ๋ฏ๋ก ์๋์ฐจ ๋ฒํธ๋ ๊ฐ์ด ๋ฃ์ด์ค์ผํ๋ค.
4. ์ ๋ ฌ
ans ๋ฐฐ์ด์ ์๋์ฐจ ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด์ค๋ค
5. ๋ต ์ถ๋ ฅ
์ ๋ ฌ๋ ans๋ฐฐ์ด์ ์๊ธ๋ง ์ง๋๋ ๋ฐฐ์ด๋ก ๋ต์ ๋ฆฌํดํ๋ฉด ๋
function getTime(x) {
x = x.split(":").map(i => parseInt(i));
return x[0]*60 + x[1];
}
function solution(fees, records) {
let [basicTime, basicFee, unitTime, unitFee] = fees;
function getFee(time) { // ์๊ฐ์ด ์ฃผ์ด์ง๋ฉด ์๊ธ์ ๊ณ์ฐํ๋ ํจ์
if(time <= basicTime) {
return basicFee
} else {
return basicFee + Math.ceil((time-basicTime)/unitTime)*unitFee
}
}
records = records.map(i => i.split(" "));
let lastIn = new Map(); // lastIn[i] = i์ ๋ง์ง๋ง ์
์ฐจ ์๊ฐ
let totalTime = new Map(); // totalTime[i] = i์ ๋์ ์ฃผ์ฐจ ์๊ฐ
// ์ถ์ฐจ๊ฐ ๋ ์ฐจ๋์ ๋์ ์ฃผ์ฐจ์๊ฐ ๊ตฌํ๊ธฐ
for(let record of records) {
let [time, car, inout] = record;
if(inout === "IN") {
lastIn.set(car, time);
} else {
let timeDiff = getTime(time) - getTime(lastIn.get(car));
lastIn.delete(car);
if(totalTime.has(car)) {
totalTime.set(car, totalTime.get(car)+timeDiff);
} else {
totalTime.set(car, timeDiff);
}
}
}
// ๋๊น์ง ์ถ์ฐจ๊ฐ ๋์ง ์์ ์ฐจ๋ ์ฒ๋ฆฌ
lastIn.forEach((time, car) => {
let timeDiff = getTime("23:59") - getTime(time);
if(totalTime.has(car)) {
totalTime.set(car, totalTime.get(car)+timeDiff);
} else {
totalTime.set(car, timeDiff);
}
})
// ์๊ธ ๊ณ์ฐํ๊ธฐ
let ans = [];
totalTime.forEach((time, car) => {
ans.push({car: car, fee: getFee(time)});
})
// ์ ๋ ฌ
ans.sort((a,b) => a.car - b.car);
return ans.map(x => x.fee);
}
'๐ ๋ญ? JS๋ก PS๋ฅผ ํ๋ค๊ณ ?' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] ํ๋ ฌ์ ๊ณฑ์ (0) | 2023.06.20 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] ํ๋ฐฐ ๋ฐฐ๋ฌ๊ณผ ์๊ฑฐํ๊ธฐ (0) | 2023.06.06 |
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] [3์ฐจ] n์ง์ ๊ฒ์ (0) | 2023.05.31 |
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ (0) | 2023.05.26 |
[ํ๋ก๊ทธ๋๋จธ์ค][JS / Javascript] [3์ฐจ] ์์ถ (0) | 2023.05.25 |