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

이재윤·2025년 1월 21일

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

1) 코드

def solution(n, t, m, timetable):
    
    newTimeTable = []

    for time in timetable:
        data = time.split(":")
        newTime = 60*int(data[0])+int(data[1])
        newTimeTable.append(newTime)

    newTimeTable.sort()

    currBusTime = 540
    currBusNum = 0

    bus = [[] for _ in range(n)]

    while currBusNum != n:
        rideBus = 0

        for i in range(m):
            if i <= len(newTimeTable)-1 and newTimeTable[i] <= currBusTime:
                bus[currBusNum].append(newTimeTable[i])
                rideBus += 1

        for i in range(rideBus):
            newTimeTable.pop(0)

        currBusTime += t
        currBusNum += 1

    lastNum = n-1
    lastBusTime = currBusTime - t
    if len(bus[lastNum]) == m:
        answer = bus[lastNum][-1]-1
    else:
        answer = lastBusTime


    hour = answer // 60
    minute = answer % 60

    if hour >= 10:
        if minute >= 10:
            answerStr = str(hour) + ":" + str(minute)
        else:
            answerStr = str(hour) + ":" + "0" + str(minute)
    else:
        if minute >= 10:
            answerStr = '0' + str(hour) + ":" + str(minute)
        else:
            answerStr = '0' + str(hour) + ":" + "0" + str(minute)

    return answerStr

2) 해설

  • 우선 기다리고 있는 사람들을 버스 번호마다 다 태운다
    -> 그 다음에 맨 마지막 버스가 비어 있다면, 맨 마지막 버스 도착 시간에만 오면된다
    -> 만약에 비어 있지 않다면, 맨 뒤에 있는 사람보다 1분만 일찍오면 된다.

0개의 댓글