https://programmers.co.kr/learn/courses/30/lessons/17678
def solution(n, t, m, timetable):
buses = get_buses(n, t, m, timetable)
last_time, last_bus = max(buses.items(), key=lambda x: x[0])
# 마지막 버스에 자리가 있으면
if len(last_bus) < m:
return get_hour(last_time)
# 마지막 버스에 자리가 없으면
return get_hour(last_bus[-1] - 1)
def get_buses(n, t, m, timetable):
buses = {i*t + 540: [] for i in range(n)}
timetable.sort()
i, j = 0, 0
while i < n and j < len(timetable):
bus = i * t + 540
crew = get_minute(timetable[j])
# 탈 수 있으면 태움
if crew <= bus and len(buses[bus]) < m:
buses[bus].append(crew)
j += 1
# 탈 수 없으면 버스 출발
else:
i += 1
return buses
def get_minute(t):
h, m = map(int, t.split(':'))
return h * 60 + m
def get_hour(t):
h = t // 60
h = str(h) if h >= 10 else '0' + str(h)
m = t % 60
m = str(m) if m >= 10 else '0' + str(m)
return f'{h}:{m}'