반응형

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)

 

 

이전 풀이와 비교

똑같다. 

반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

길 찾기 게임*  (0) 2021.05.04
자동완성*  (0) 2021.05.04
추석 트래픽*  (0) 2021.05.03
동굴 탐험*  (0) 2021.05.02
경주로 건설*  (0) 2021.05.01

+ Recent posts