[PRO] 셔틀버스

천호영·2022년 9월 10일
0

알고리즘

목록 보기
54/100
post-thumbnail
def hhmm_to_minute(hhmm):
    h,m = hhmm.split(":")
    return int(h)*60+int(m)

def minute_to_hhmm(minute):
    h,m = divmod(minute,60)
    return f"{h:02d}:{m:02d}"

def solution(n, t, m, timetable):
    answer = ''
    
    bus_minute_tables=[]
    for i in range(n):
        for _ in range(m):
            bus_minute_tables.append(540+t*i)
    bus_minute_tables.sort()
    
    crew_minute_tables = []
    for hhmm in timetable:
        minute = hhmm_to_minute(hhmm)
        crew_minute_tables.append(minute)
    crew_minute_tables.sort()
    
    bus_idx = 0
    crew_idx = 0
    
    last_enter_minute = 0
    while bus_idx < len(bus_minute_tables) and crew_idx < len(crew_minute_tables):
        if crew_minute_tables[crew_idx]<=bus_minute_tables[bus_idx]:
            last_enter_minute = crew_minute_tables[crew_idx] # 마지막 탑승성공시각
            bus_idx+=1
            crew_idx+=1
        else:
            bus_idx+=1
    
    # 크루는 다 탔는데 버스가 남는 경우
    if crew_idx == len(crew_minute_tables) and bus_idx < len(bus_minute_tables):
        ans_minute = bus_minute_tables[-1]
        return minute_to_hhmm(ans_minute)
    # 버스와 크루 모두 딱 맞게 끝났을 때
    elif crew_idx == len(crew_minute_tables) and bus_idx == len(bus_minute_tables):
        ans_minute = crew_minute_tables[-1] - 1
        return minute_to_hhmm(ans_minute)
    # 못 탄 크루가 존재할 때
    elif crew_idx < len(crew_minute_tables) and bus_idx == len(bus_minute_tables):
        if crew_minute_tables[crew_idx] <= bus_minute_tables[-1]: # 탈 수 있는데 사람이 많아서
            # 마지막으로 탑승한 사람시각 -1
            ans_minute = last_enter_minute - 1
            return minute_to_hhmm(ans_minute)
        else:      
            ans_minute = bus_minute_tables[-1]
            return minute_to_hhmm(ans_minute)
profile
성장!

0개의 댓글