상상쓰

[프로그래머스] [1차] 셔틀버스 본문

Coding Test

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

상상쓰 2021. 8. 25. 13:40

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

 

busTimetable 은 셔틀 운행 시각을 나타낸다.

busTimetable = ['09:00', '09:00' + (t분 * 1), ..., '09:00' + (t분 * (n-1))]

dictionary 를 이용하여 busTimetable 의 원소 key로 차례대로 timetable 과 비교하여 태울 수 있는 시간대를 value 로 취한다.

 

즉, 마지막 셔틀 운행 시각의 대기열이 m 보다 작으면 콘은 가장 낮은 시각인 마지막 셔틀 운행 시각에 도착해도 탑승할 수 있다. (answer = busTimetable[-1])

m 이라면 콘은 대기열의 제일 뒤에 서므로 대기열에 가능 늦게 도착하는 시각에서 1분을 뺀 시각을 반환하면 된다. 

 

import datetime
from collections import defaultdict

def solution(n, t, m, timetable):
    answer = ''
    busTimetable = [(datetime.datetime(2021, 8, 25, 9, 0, 0) + datetime.timedelta(minutes=t*i)).strftime('%H:%M') for i in range(n)]
    timetable.sort(reverse=True)
    dic = defaultdict(list)
    
    for i in busTimetable:
        cnt = 0
        
        while cnt < m and timetable and timetable[-1] <= i:
            cnt += 1
            dic[i].append(timetable.pop())
    
    if len(dic[busTimetable[-1]]) < m:
        answer = busTimetable[-1]
    else:
        time = dic[busTimetable[-1]][-1]
        answer = (datetime.datetime(2021, 8, 25, int(time.split(':')[0]), int(time.split(':')[1]), 0) - datetime.timedelta(minutes=1)).strftime('%H:%M')
        
    return answer

print(solution(1, 1, 5, ['08:00', '08:01', '08:02', '08:03'])) # 09:00
Comments