반응형
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분 일찍 간다.
from collections import deque
def solution(n, t, m, timetable):
bustimes = [convert_time("09:00") + (t * i) for i in range(n)] # 버스 스케줄
timetable = deque(sorted([convert_time(i) for i in timetable])) # 크루들 도착 시간
for b in bustimes: # 버스 운행
for i in range(m): # 한 명씩 m 명까지 탑승
if len(timetable) == 0 or timetable[0] > bustimes[-1]: # 모든 크루 탑승 or 남은 크루들 탑승 불가
return convert_time(bustimes[-1]) # 마지막 버스 시간에 간다.
if timetable[0] <= b: # 현재 버스에 탈 수 있다.
last = timetable.popleft()
else: break # 다음 버스로
return convert_time(last - 1) # 마지막 탑승 크루 보다 1분 일찍 간다.
def convert_time(time): # 시간 포맷 변환 함수
if type(time) == str: # HH:MM to Minutes
h, m = time.split(':')
return int(h) * 60 + int(m)
else: # Minutes to HH:MM
return str(time // 60).zfill(2) + ':' + str(time % 60).zfill(2)
이전 풀이와 비교
: 똑같다.
반응형