1import math
2
3def diff(start, end):
4 sh, sm = map(int, start.split(':'))
5 eh, em = map(int, end.split(':'))
6
7 return (eh*60+em) - (sh*60+sm)
8
9def calc(time, baseTime, baseFee, unitTime, unitFee):
10 if time < baseTime:
11 return baseFee
12 time -= baseTime
13 return baseFee + math.ceil(time/unitTime)*unitFee
14
15def solution(fees, records):
16 cars = {}
17 for i in records:
18 time, car_num, _ = i.split(' ')
19 # 새로 입차 한 경우
20 if not car_num in cars:
21 cars[car_num] = [0, time]
22 else:
23 # 출차 후 다시 입차한 경우
24 if cars[car_num][1] == '':
25 cars[car_num][1] = time
26 # 출차한 경우
27 else:
28 cars[car_num][0] += diff(cars[car_num][1], time)
29 cars[car_num][1] = ''
30
31 # 아직 출차하지 않은 차량들에 대해 23:59에 출차한 것으로 간주
32 for num in cars:
33 if cars[num][1] != '':
34 cars[num][0] += diff(cars[num][1], '23:59')
35 cars[num][1] = ''
36
37 # 요금 계산
38 for num in cars:
39 cars[num] = calc(cars[num][0], fees[0], fees[1], fees[2], fees[3])
40
41 # 차량 번호 순으로 정렬
42 sorted_keys = sorted(cars.keys())
43 # 요금만 추출해서 반환
44 return [cars[key] for key in sorted_keys]
문제
- 기본 시간, 기본 요금, 단위 시간, 단위 요금
- 차량의 입출차 기록 (시각(HH:MM), 차량번호(XXXX), 내역(입차/출차))
- 위 정보가 주어질때, 각 차량별 주차 요금을 계산해서 차량번호 순으로 정렬하여 반환하라
- 입차만 하고 출차하지 않은 차량은, 23:59에 출차한 것으로 간주한다
- TC
- input
fees: [180, 5000, 10, 600]
records: [“05:34 5961 IN”, “06:00 0000 IN”, “06:34 0000 OUT”, “07:59 5961 OUT”, “07:59 0148 IN”, “18:59 0000 IN”, “19:09 0148 OUT”, “22:59 5961 IN”, “23:00 5961 OUT”] - ouput
[14600, 34400, 5000]
- input
해결방법
- cars라는 dictionary에 차량번호를 key로, [주차시간, 입차시간]을 value로 저장한다
- 마지막에 한번에 요금을 계산한다