[프로그래머스] 셔틀버스

문제

  • 셔틀을 09:00부터 총 nt분 간격으로 역에 도착하며, 하나의 셔틀에는 최대 m명의 승객이 탈 수 있다.
  • 셔틀은 도착했을 때 도착한 순간에 대기열에 선 크루까지 포함해서 대기 순서대로 태우고 바로 출발한다. 예를 들어 09:00에 도착한 셔틀은 자리가 있다면 09:00에 줄을 선 크루도 탈 수 있다.

콘이 셔틀을 타고 사무실로 갈 수 있는 도착 시간 중 제일 늦은 시각을 구하여라.

입력형식

  • 셔틀 운행 횟수 n (0<n<=10)
  • 셔틀 운행 간격 t (0<t<=60)
  • 한 셔틀에 탈 수 있는 최대 크루 수 m (
  • 크루가 대기열에 도착하는 시각을 모은 배열 timetable
    • 1 <= len(timetable) <= 2000
    • HH:MM 형식
    • 00:01에서 23:59 사이이다.

출력형식

콘이 무사히 셔틀을 타고 사무실로 갈 수 있는 제일 늦은 도착 시각을 출력한다. 도착 시각은 HH:MM 형식이며, 00:00에서 23:59 사이의 값이 될 수 있다.

코드

def solution(n, t, m, timetable):
    answer = ''
    timetable.sort()
    bus = [[540 + ( t * x), 0, 0] for x in range(n)]
    
    num = 0 # bus 번호
    for time in [getTimeNum(x) for x in timetable]:
        while num < len(bus) and (time > bus[num][0] or bus[num][1] >= m):
            num += 1
        
        if num == len(bus): break
        bus[num][1] += 1
        bus[num][2] = time 
        
    return getTimeStr(bus[-1][0]) if bus[-1][1] < m else getTimeStr(bus[-1][2] - 1)

def getTimeNum(time):
    hour, minute = map(int, time.split(":"))
    return hour * 60 + minute

def getTimeStr(time):
    return '%02d:%02d' % (time // 60, time % 60)

좋은 웹페이지 즐겨찾기