문제
해결 과정
- 천천히 구현하는 것
toMinute
: 문자열을 받아서 분으로 변환하는 함수
- for문을 통해서
records
원소를 공백을 기준으로 자른다.
key
는 차 번호
values
에는 리스트로 넣는데, [시간, 입차or출차]
dic = {5961: [[334, 'IN'], [479, 'OUT'], [1379, 'IN'], [1380, 'OUT']], 0: [[360, 'IN'], [394, 'OUT'], [1139, 'IN']], 148: [[479, 'IN'], [1149, 'OUT']]}
차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
조건에 의해 정렬 필요
- 차량 번호를 기준으로 정렬을 해야하기 때문에 리스트를 만들 때 key + value가 필요하다 ->
dic.items()
- 차량 번호를 기준으로 정렬 ->
key=lambda x : x[0]
sortList = [(0, [[360, 'IN'], [394, 'OUT'], [1139, 'IN']]), (148, [[479, 'IN'], [1149, 'OUT']]), (5961, [[334, 'IN'], [479, 'OUT'], [1379, 'IN'], [1380, 'OUT']])]
- 총 누적 시간 계산하는 반복문
- 차량 번호 별로 계산하는 반복문
- 입차일 때 시간을 빼주고 출차일 때 시간을 더해준다.
- 출차된 내역이 없는 경우 = 마지막 값이 "IN"인 경우
- 기본 시간보다 작으면 기본 요금을 지불하고 아니면 계산 값을 append
풀이
import math
def toMinute(s):
h,m = map(int,s.split(":"))
return (h * 60) + m
def solution(fees, records):
answer = []
dt, df, ut, uf = fees
dic = dict()
for i in records:
time, number, history = i.split()
number = int(number)
if number in dic:
dic[number].append([toMinute(time), history])
else:
dic[number] = [[toMinute(time),history]]
sortList = list(dic.items())
sortList.sort(key=lambda x : x[0])
for i in sortList:
t = 0
for j in i[1]:
if j[1] == 'IN':
t -= j[0]
else:
t += j[0]
if i[-1][-1][1] == 'IN':
t += toMinute("23:59")
if t <= dt:
answer.append(df)
else:
answer.append(df + (math.ceil((t - dt) / ut)) * uf)
return answer