import datetime
def solution(fees, records):
answer = []
answer2 = []
db = {}
time_db = {}
for i in records :
a,b,c = i.split()
h, m = map(int, a.split(":"))
if c == "IN" : db[b] = [h, m]
else :
db_h, db_m = db[b]
start = datetime.timedelta( hours=db_h, minutes=db_m)
end = datetime.timedelta( hours=h, minutes=m)
if b not in time_db : time_db[b] = end-start
else : time_db[b] += end - start
del db[b]
end = datetime.timedelta(hours=23, minutes=59)
for key, item in db.items() :
start = datetime.timedelta(hours=item[0], minutes=item[1])
if key not in time_db : time_db[key] = end-start
else : time_db[key] += end - start
default_time = datetime.timedelta(minutes = fees[0])
pay_time = datetime.timedelta(minutes = fees[2])
for key, item in time_db.items() :
fee = fees[1]
if default_time < item :
item = item - default_time
item = item / pay_time
if item % 1 != 0 : item += 1
fee += int(item) * fees[3]
answer2.append([key, fee])
answer2.sort()
for i in answer2 :
answer.append(i[1])
return answer
문제정리
주차장의 요금표와 차량이 들어오고(입차) 나간(출차)기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다.
다만 같은차가 다시들어왔다가 나갈 수도 있고 하루동안 안나갈 경우 23:59분에 모든차가 나가는 것으로 요금을 계산,
요금표에는 기본시간,기본요금, 단위시간,단위요금으로 작성되어있고 기본시간이 지나지않았을 경우에는 기본요금만(무조건 기본요금) 넘었을 경우 단위시간 당 단위요금을 적용하여 계산하는 문제
return은 차량번호 순으로 정렬한 주차요금 리스트를 반환하는 문제
풀이과정
조건이 너무 많아서 오래걸렸던같던거같다.
처음에는 문제를 잘못이해해서 들어오고 나갈때마다 계산을 하도록하였는데 코드를 작성하고 보니 그렇게 푸는 문제가 아니였다… 다시 푸는데 오래걸렸던것 같다.
전체적인 로직은 고민이 크게 되지않았던거같다. 그냥 많은 조건을 코드로 구현하는데 시간이 오래걸렸다.
풀이 후
전체적으로 풀이는 비슷하였다. 풀이과정에서 설명한 순서대로 풀이하였으나 구현한 코드는 살짝 다른 부분이 존재하였다.
어떤분은 저장하는 dict에 직접만든 클래스를 만들어서 풀이하였다.
나와 다른점은 시간 저장 및 연산을 위해 datetime.timedelta를 사용하였는데 다른 사람들은 “시간:분”을
분으로 계산하여 풀이하였다는 점이 깔끔했던것 같다.