from collections import defaultdict
from datetime import datetime
from math import ceil
def solution(fees, records):
answer = []
cars = defaultdict(list)
for record in records: # {차량번호 : 입출차 시간} 형태로 딕셔너리를 만듬
data = record.split()
cars[data[1]].append(datetime.strptime(data[0], "%H:%M"))
for key in cars.keys(): # 입차 출차 쌍이 안맞으면 "23:59 출차" 추가
if len(cars[key]) % 2 != 0:
cars[key].append(datetime.strptime("23:59", "%H:%M"))
for key in sorted(cars.keys()):
total_time = 0
for i in range(0, len(cars[key]) - 1, 2): # 총 시간 계산
delta = cars[key][i+1] - cars[key][i]
total_time += delta.seconds // 60
if total_time <= fees[0]: # 기본요금만 내는 경우
answer.append(fees[1])
continue
answer.append(
fees[1] + ceil((total_time - fees[0]) / fees[2]) * fees[3]
) # 요금계산
return answer
문제의 조건대로 구현만 하면 되는 쉬운 구현문제였다.
이러한 문제는 빠르고 정확하게 풀고 넘어가는데 중요한 것 같다.
record 배열의 길이가 최대 1,000이기 때문에 차량 갯수는 그보다 작다.
따라서 시간복잡도는 크게 고려할 필요는 없었다.
다만 record에는 여러 정보가 혼재되어 있으므로 차량번호를 key값으로 하는
dictionary를 도입하여 정보들을 활용하기 편하게 재구성하였다.
또한 시간 차이를 계산하기 편리하게 하기위해 datetime 라이브러리를 사용하여
timedelta를 구한 뒤 필요한 데이터들을 파싱했다.