Haribo ML, AI, MATH, Algorithm

[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)}
    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분일찍 대기

Similar Posts

이전 포스트 매칭 점수

다음 포스트 숫자 게임

Comments