본문 바로가기
Data Engineering/Python

[코테] 프로그래머스 - [1차] 셔틀버스 Python 코드

by strongstar 2025. 10. 31.
from datetime import datetime, timedelta

def solution(n, t, m, timetable):
    TIME_FORMAT = "%H:%M"

    shuttles = []   # 셔틀 버스 리스트 (출발 시간, 탑승 가능한 수)
    shuttles.append([datetime.strptime("09:00", TIME_FORMAT), m])
    for i in range(1, n):
        shuttles.append([shuttles[0][0] + timedelta(minutes=t*i), m])
    last_shuttle_time = shuttles[-1][0] # 마지막 출발 시간
    
    timetable.sort()
    
    success_time = []   # 탑승에 성공한 리스트
    departure_time, available_cnt = shuttles.pop(0)
    crew = timetable.pop(0)

    while crew:
        crew_time = datetime.strptime(crew, TIME_FORMAT)

        if crew_time <= departure_time and available_cnt > 0:
            # 탑승 가능
            available_cnt -= 1
            success_time.append(crew_time)
            crew = timetable.pop(0) if len(timetable) > 0 else None
        else:
            # 탑승 불가능. 다음 차량이 있다면 대기.
            if len(shuttles) > 0:
                departure_time, available_cnt = shuttles.pop(0)
            else:
                break
    
    if available_cnt > 0 or len(shuttles) > 0:
        # 자리가 남았으면, 마지막 셔틀 시간에 타면됨.
        return last_shuttle_time.strftime(TIME_FORMAT)
    else:    
        # 마지막으로 탑승 성공한 사람보다 1분 먼저 도착해야함.
        last_success_time = success_time[-1] + timedelta(minutes=-1)
        return last_success_time.strftime(TIME_FORMAT)
        

# https://school.programmers.co.kr/learn/courses/30/lessons/17678​