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