Algorithm/프로그래머스

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

자흐니 2022. 2. 13. 19:32

🤔 문제


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

 

코딩테스트 연습 - [1차] 셔틀버스

10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"

programmers.co.kr

 

😀 풀이


 본 문제의 핵심은 콘이 마지막 버스에 가장 늦게 탑승해야 한다는 것입니다. 출근자들을 순서대로 버스에 태워 보낸다고 생각하고 마지막 버스에 자리가 남는다면 마지막 버스 출발시간에 도착하면 되고 마지막 버스가 다 차있다면 마지막 버스에 마지막 도착 사람보다 1분 빠르게 도착하면 됩니다. 그에 맞게 구현하면 정답을 낼 수 있습니다.

 

💻 풀이 코드는 아래와 같습니다.

def timeToMinute(time):
    h, m = map(int, time.split(":"))
    return h * 60 + m

def minuteToTime(minute):
    time = ''
    h, m = divmod(minute, 60)
    time += str(h) if h >= 10 else '0' + str(h)
    time += ':'
    time += str(m) if m >= 10 else '0' + str(m)
    return time

def solution(n, t, m, timetable):
    timeDict = dict()
    busTime = [timeToMinute("9:00") + i * t for i in range(n)]
    timetable.sort(reverse=True)

    for time in busTime:
        timeDict[time] = []
    
    for _ in range(n * m):
        if not timetable:
            break 
        person = timeToMinute(timetable.pop())
        for time in busTime:
            if (person <= time) and len(timeDict[time]) < m:
                timeDict[time].append(person)
                break

    if len(timeDict[busTime[-1]]) < m:
        return minuteToTime(busTime[-1])
    return minuteToTime(timeDict[busTime[-1]][-1] - 1)
반응형