https://school.programmers.co.kr/learn/courses/30/lessons/92341
dictionary자료형을 이용해 번호판별로 시간, 시간의 누적합, 출입유형을 저장한다.
dict에 값이 없으면 처음에 값을 넣어준다.
출입이 out이면 dict에 있는 시간과 빼서 누적합을 갱신시킨다.
출입이 in이면 시간을 갱신시켜 다음에 out이 오면 누적합을 계산할 수 있도록한다.
누적합계산이 끝나고 결과에 출입이 in이면 23:59에서 시간을 빼서 누적합에 추가한다.
그리고 요금을 계산하고 키값에 따라 정렬 후 배열에 요금을 추가하여 리턴한다.
from collections import *
import datetime
import math
def solution(fees, records):
dict = defaultdict(list)
result =[]
for record in records:
time, num, io = record.split()
if not dict[num]:
dict[num] =[time,0,io]
if dict[num] and io=='OUT':
interval = datetime.datetime.strptime(time, "%H:%M") - datetime.datetime.strptime(dict[num][0], "%H:%M")
dict[num][1] += interval.seconds // 60
dict[num][2]='OUT'
elif dict[num] and io=='IN':
dict[num][0] = time
dict[num][2] = 'IN'
for i in dict:
if dict[i][2] == 'IN':
interval = datetime.datetime.strptime('23:59', "%H:%M") - datetime.datetime.strptime(dict[i][0], "%H:%M")
dict[i][1] += interval.seconds // 60
dict[i][2] = 'OUT'
if dict[i][1] <= fees[0]:
fee = fees[1]
else:
fee = fees[1] + math.ceil((dict[i][1]-fees[0])/ fees[2]) * fees[3]
dict[i][2]=fee
sort_dict = sorted(dict.items())
for i,v in enumerate(sort_dict):
fee = sort_dict[i][1][2]
result.append(fee)
return result