
아래 프로그래머스 로고를 클릭하면 해당 문제로 이동합니다 😀
이 문제의 풀이과정은 이 흐름을 따라가면 된다 !
parking: type이 IN인 경우 각 차량의 입차 시간을 저장, OUT인 경우 저장되어있던 입차시간 꺼내와서 누적시간 계산totalTime: 각 차량의 누적 주차 시간을 저장import math
from collections import defaultdict
def solution(fees, records):
basic_time, basic_rate, unit_time, unit_rate = fees
parking = {}
total_time = defaultdict(int)
for record in records:
time_str, car, status = record.split()
h, m = map(int, time_str.split(":"))
minutes = h * 60 + m
if status == "IN":
parking[car] = minutes
else:
total_time[car] += minutes - parking.pop(car)
for car, in_time in parking.items():
total_time[car] += 1439 - in_time
result = []
for car in sorted(total_time):
time = total_time[car]
if time <= basic_time:
result.append(basic_rate)
else:
extra = math.ceil((time - basic_time) / unit_time)
result.append(basic_rate + extra * unit_rate)
return result
function solution(fees, records) {
const [basicTime, basicRate, unitTime, unitRate] = fees;
let parking = new Map();
let totalTime = new Map();
for(const record of records){
const [timeStr, car, type] = record.split(" ");
const [h, m] = timeStr.split(":").map(Number);
const time = 60*h + m;
if(type === "IN"){
parking.set(car, time);
} else {
const inTime = parking.get(car);
const duration = time - inTime;
totalTime.set(car, (totalTime.get(car) || 0) + duration);
parking.delete(car);
}
}
for(const [car, inTime] of parking.entries()){
const duration = 1439 - inTime;
totalTime.set(car, (totalTime.get(car) || 0) + duration);
}
const result = Array.from(totalTime.entries())
.sort((a, b) => a[0].localeCompare(b[0]))
.map(([car, time]) => {
if(time <= basicTime) return basicRate;
return basicRate + Math.ceil((time - basicTime) / unitTime) * unitRate;
});
return result;
}
