난이도: Lv. 2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/92341
알고리즘
1. 구조체에 차량 번호를 key로 하고, value는 입차/출차 시간을 저장하는 배열로 한다.
2. value의 길이가 홀수이면 입차된 후 출차된 내역이 없는 것이므로 value 배열에 '23:59'를 push()한다.
3. 각 차량별 누적 시간을 계산하여 요금을 계산하고, [차량번호, 요금] 배열을 정답 배열에 push() 한다.
4. 3.의 배열을 차량 번호 기준 오름차순 정렬하고, 요금들만 담은 배열을 반환한다.
코드
function solution(fees, records) {
var answer = [];
const recordObj = {};
for (let record of records) {
const splitRecord = record.split(' ');
if (Object.hasOwn(recordObj, splitRecord[1])) {
recordObj[splitRecord[1]].push(splitRecord[0])
} else {
recordObj[splitRecord[1]] = [splitRecord[0]];
}
}
for (let [key, value] of Object.entries(recordObj)) {
if (value.length % 2 === 1) { value.push('23:59'); }
let sumTime = 0;
for (let i = 0; i < value.length; i += 2) {
const splitInTime = value[i].split(':');
const inTime = Number(splitInTime[0]) * 60 + Number(splitInTime[1]);
const splitOutTime = value[i + 1].split(':');
const outTime = Number(splitOutTime[0]) * 60 + Number(splitOutTime[1]);
sumTime += outTime - inTime;
}
const fee = sumTime <= fees[0] ? fees[1] : fees[1] + Math.ceil((sumTime - fees[0]) / fees[2]) * fees[3];
answer.push([key, fee]);
}
answer.sort((a, b) => a[0] - b[0]);
return answer.map(fee => fee[1]);
}
주저리
잠와서 뇌 빼고 풀다가 주차 요금이 너무 높게 나와서 당황했다. 틀린 이유는 입/출차할 때마다 요금을 계산했기 때문이다. 하루동안의 누적 시간으로 요금을 계산해야 한다. 정답률이 왜 낮은지 이해가 안 가는 문제였다.
'코딩테스트' 카테고리의 다른 글
[JS] 방문 길이 (0) | 2024.01.05 |
---|---|
[JS] 뒤에 있는 큰 수 찾기 (0) | 2024.01.04 |
[JS] 더 맵게 (0) | 2024.01.03 |
[JS] 게임 맵 최단거리 (0) | 2023.12.30 |
[JS] 모음사전 (0) | 2023.12.28 |