본문 바로가기

PS/프로그래머스

[프로그래머스 LV 3] 셔틀버스 (파이썬/python)

728x90

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

 

일단 시간을 편하게 다루기 위해

모두 분 단위로 바꿔주었다.

 

timetable을 정렬해서 가장 일찍 온 사람 순서대로 배치했다.

 

반복문을 돌며 탈수 있는 사람들을 모두 태웠다.

만약 마지막 버스에 정원초과가 났을 경우

마지막으로 탄 사람보다 1분 일찍오게 구성했다.

 

여유롭게 탈 수 있을경우 딱 버스가 오는 시간에 탑승하도록 구성했다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from collections import deque
 
 
def solution(n, t, m, timetable):
    answer = 0
    answer_str = ''
    # 전부다 분 단위로 바꿔주겠음
    time = deque()
    for ti in timetable:
        hour, minute = ti.split(":")
        hour = int(hour) * 60
        minute = int(minute)
        time.append(hour + minute)
    time = deque(sorted(time))
 
    bus_time = 540
    for _ in range(n):
        max_cnt = m
        last = bus_time
        while time:
            if max_cnt != 0 and time[0<= bus_time:
                last = time.popleft()
                max_cnt -= 1
            else:
                break
        if _ == n - 1 and max_cnt == 0:
            answer = last - 1
        elif _ == n - 1 and max_cnt != 0:
            answer = bus_time
 
        bus_time += t
    ah = str(answer // 60)
    am = str(answer % 60)
    if len(ah) == 1:
        ah = '0' + ah
    if len(am) == 1:
        am = '0' + am
 
    answer_str = ah + ":" + am
    return answer_str
cs

 

728x90