[Programmers] P92341 주차 요금 계산
[Programmers] P92341 주차 요금 계산
Question
Language: Python
주어진 문제의 조건에 따라 명확하게 구현 하면 된다.
- 차량의 총 주차 누적 시간, 입차 시간, 주차 상태를 저장하는 dictionary를 만든다.
- 주차 기록에 따라 누적시간, 입차 시간, 주차 상태를 최신화시킨다.
- 끝까지 출차하지 않은 차량들에 대해서 마지막 시간을 기준으로 경과한 시간 만큼 누적 시간에 추가시킨다.
- 주차요금 계산 방식에 따라 각 차량별 주차요금을 계산한다.
이때, 차량 번호에 대해서 정렬을 진행한 후 3번을 진행하게 되면, 최종적으로 차량 번호가 낮은 순으로 주차 요금을 쉽게 구할 수 있다.
Solution
from math import ceil
from collections import defaultdict
#HH:MM을 분 단위로 변환해주는 함수
def time_to_minute(time):
fragments=time.split(":")
return int(fragments[0])*60+int(fragments[1])
def solution(fees, records):
answer = []
car_parking_info=dict()
#주차 기록에 따라, 누적시간, 입차 시간, 주차 상태를 최신화한다.
for record in records:
time,car_info,option=record.split(" ")
#totaltime time status로 저장
if car_info not in car_parking_info:
car_parking_info[car_info]=(0,0,"")
if option=="IN":
car_parking_info[car_info]=(car_parking_info[car_info][0],time_to_minute(time),"IN")
else:
car_parking_info[car_info]=(car_parking_info[car_info][0]+time_to_minute(time)-car_parking_info[car_info][1],0,"OUT")
#차량 번호에 대해서 정렬을 수행한다.
car_infos=list(car_parking_info.keys())
car_infos.sort()
#주차 요금 계산
for car_info in car_infos:
total_time,time,status=car_parking_info[car_info]
#아직 차량이 입차 중인 경우 입차 시간을 기준으로 마지막 시간인 23:59까지의 시간 차이를 누적 시간에 추가시킨다.
if status == "IN":
total_time+=(1439-time)
#기본 시간을 넘긴 경우
if total_time >= fees[0]:
answer.append(fees[1]+ceil((total_time-fees[0])/fees[2])*fees[3])
#기본 시간 인 경우
else:
answer.append(fees[1])
return answer
댓글남기기