https://school.programmers.co.kr/learn/courses/30/lessons/92341
from datetime import datetime
import math
def solution(fees, records):
answer = []
park = [] # 주차중인 차 리스트
real_rec = [] # records를 사용하기 편하게 변환함
time_table = dict() # 주차된 차와 시간을 기록하는 딕셔너리
score = dict() # 주차 요금을 기록하는 딕셔너리
for rec in records:
time,number,IO = rec.split()
elem = (time,number,IO)
real_rec.append(elem)
for rec in real_rec:
if rec[1] not in park and rec[2]=='IN':
park.append(rec[1])
time_table[rec[1]] = rec[0]
## 주차된 차가 아니면 park와 time_table에 넣어줌
elif rec[1] in park:
park.remove(rec[1])
time_dif = datetime.strptime(rec[0],'%H:%M') - datetime.strptime(time_table[rec[1]],'%H:%M') # 주차 시간 계산
time_dif = int(time_dif.seconds/60)
# 출차할때는 park에서 제거해줌
if rec[1] not in score:
score[rec[1]] = time_dif
else:
score[rec[1]] += time_dif
if len(park) != 0: # 출차 기록이 없는 차가 있는 경우를 처리해줌
for t in park:
time_dif = datetime.strptime('23:59','%H:%M') - datetime.strptime(time_table[t],'%H:%M')
time_dif = int(time_dif.seconds/60)
if t not in score:
score[t] = time_dif
else:
score[t] += time_dif
score_key = list(score.keys())
score_key.sort()
for i in score_key:
if score[i] <= fees[0]:
answer.append(fees[1])
else:
ans = fees[1] + math.ceil((score[i]-fees[0]) / fees[2]) * fees[3]
answer.append(ans)
return answer
자료 구조를 여러개 써서 복잡했지만 차분히 풀면 풀만했다.
시간 계산하는 방법이 생각이 안나서 구글링으로 datetime
모듈을 참고했다.