Link: https://programmers.co.kr/learn/courses/30/lessons/92341
주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.
요금표
기본 시간(분) 기본 요금(원) 단위 시간(분) 단위 요금(원)
180 5000 10 600
입/출차 기록
시각(시:분) 차량 번호 내역
05:34 5961 입차
06:00 0000 입차
06:34 0000 출차
07:59 5961 출차
07:59 0148 입차
18:59 0000 입차
19:09 0148 출차
22:59 5961 입차
23:00 5961 출차
자동차별 주차 요금
차량 번호 누적 주차 시간(분) 주차 요금(원)
0000 34 + 300 = 334 5000 + ⌈(334 - 180) / 10⌉ x 600 = 14600
0148 670 5000 +⌈(670 - 180) / 10⌉x 600 = 34400
5961 145 + 1 = 146 5000
def solution(fees, records):
answer = []
parkingLot = {}
total_fees = {}
#각 기록들을 " "를 기준으로 나누어서 저장한다.
for x in records:
time = x.split(" ")[0]
hour_, min_ = time.split(":")[0],time.split(":")[1]
number = x.split(" ")[1]
act = x.split(" ")[2]
#차가 주차장으로 들어올때
if act == "IN":
parkingLot[number] = int(hour_)*60 + int(min_)
if number not in total_fees:
total_fees[number] = 0
#차가 주차장에서 나갈때
else:
total_fees[number] += int(hour_)*60 + int(min_) - parkingLot[number]
del parkingLot[number] #주차장에서 제거
#주차장에 남아있는 차들 23:59 기준으로 정산
for car in parkingLot:
total_fees[car] += 23*60+59 - parkingLot[car]
#금액 계산 후 정답 리스트에 저장
for keys in sorted(total_fees):
#5000 + ⌈(334 - 180) / 10⌉ x 600 = 14600
day_fee = fees[1]
if (total_fees[keys] - fees[0]) % fees[2] == 0:
day_fee += ((total_fees[keys] - fees[0])//fees[2]) * fees[3]
else:
day_fee += (((total_fees[keys] - fees[0])//fees[2])+1) * fees[3]
#기본요금이 안넘을 경우 > 기본요금을 채우기
if day_fee <= fees[1]:
day_fee = fees[1]
answer.append(day_fee)
return answer