from collections import defaultdict
to_minute = lambda time : sum([int(x)*y for x, y in zip(time.split(':'), [60, 1])])
to_time = lambda minute : ':'.join(map('{0:02d}'.format, divmod(minute, 60)))
def solution(n, t, m, timetable):
minute_table = sorted(map(to_minute, timetable))
bus_table = {to_minute('09:00')+t*i:[] for i in range(n)}
for bus in bus_table :
for j in range(m) :
if minute_table and minute_table[0] <= bus :
bus_table[bus].append(minute_table.pop(0))
last_time, last_bus = list(bus_table.items())[-1]
return to_time(last_time) if len(last_bus) < m else to_time(max(last_bus)-1)
막차에 타고있는 놈들 구하기
최대한 늦게 출근하기 위해서는 버스 막차시간과 막차탄놈들의 대기열 시간만 알면된다.
버스시간표
dictionary
생성각 버스에 대기하고 있던 사람들을 태울 수 있는만큼 태움
버스 막차 시간과, 버스에 타고있는 사람들의 대기시간 파악
- 버스 막차에 빈공간이 남으면 버스 막차시간에 기다리면됨
- 버스 막차에 빈공간이 없으면 막차탄 사람중 가장 마지막 사람보다 1분일찍 기다리면됨
from collections import defaultdict
to_minute = lambda time : sum([int(x)*y for x, y in zip(time.split(':'), [60, 1])])
to_time = lambda minute : ':'.join(map('{0:02d}'.format, divmod(minute, 60)))
def solution(n, t, m, timetable):
minute_table = sorted(map(to_minute, timetable)) # 대기인원 시간순으로 정렬
bus_table = {to_minute('09:00')+t*i:[] for i in range(n)} # bus 시간표
for bus in bus_table :
for j in range(m) :
if minute_table and minute_table[0] <= bus # 대기하는 사람이 있고, 버스에 탈 수 있으면 버스에 태움
bus_table[bus].append(minute_table.pop(0))
last_time, last_bus = list(bus_table.items())[-1] #막차버스시간과, 대기인원들 리스트
return to_time(last_time) if len(last_bus) < m else to_time(max(last_bus)-1)
# 막차에 빈공간 있으면 막차에 대기, 아니라면 제일 늦게온놈보다 1분일찍 대기