Altiora Petamus

셔틀버스 본문

1day-1algorithm

셔틀버스

Haril Song 2021. 4. 26. 14:51

Reference

https://programmers.co.kr/learn/courses/30/lessons/17678?language=python3

 

아래 풀이 방법은 제가 푼 방식으로 정해와는 차이가 있을 수 있습니다.

문제 풀이

언뜻 보기엔 쉬워보였지만 문제의 의미나 입출력의 상관관계를 이해하기가 힘들어서 생각보다 오래 걸렸던 것 같다.

해결하기 위한 순서는 다음과 같다.

 

  • 시간을 비교해주기 위해서 문자열로 된 시간 단위를 분으로 변환한다.
    • 정규식 활용
  • waiting 이라는 배열을 선언해주고 이 안에 분으로 변환된 시간을 오름차순으로 정렬하여 담아둔다.
  • 셔틀의 운행횟수만큼 반복하면서 대기열에서 차례대로 셔틀에 탑승시킨다.
  • 마지막 셔틀에 자리가 남는다면 콘은 마지막 셔틀의 도착시간에 대기열에 들어가면 된다.
  • 자리가 남지 않는다면 마지막으로 셔틀에 타게 되는 사람보다 콘을 1분 일찍 오게 한다.
  • 분으로 바꿨던 시간을 다시 출력형식에 맞게 포맷팅해준다.
# 2018 kakao blind recruitment
# level 3

import re
from collections import deque


def solution(n, t, m, timetable):
    # 시간을 분단위로 변경
    con_waiting_time = 0
    waiting = []
    regex = re.compile('\D')
    for time in timetable:
        hour_min = regex.split(time)
        waiting.append(int(hour_min[0]) * 60 + int(hour_min[1]))

    waiting = sorted(waiting)  # 온 순서대로 세우기

		# 버스는 9시부터 온다. (540분)
    start_time = 540

    # 셔틀 운행 횟수만큼 반복
    # 만약 마지막 셔틀에 자리가 남는다면 콘은 그 셔틀의 도착시간에 대기열에 들어가면 된다.
    # 자리가 남지 않는다면
    # => 마지막에 줄을 서는 사람보다 1분만 빨리오게 하면 된다.
    for driving in range(n):
        # bus 최대 인원 설정
        # FIXME: 굳이 queue 를 사용하지 않아도 해결할 수 있다. 잘 생각해보면 반복문도 없앨 수 있을 것 같다.
        bus = deque(maxlen=m)
        for _ in range(m):
            if not waiting:
                break
            if waiting[0] <= start_time:
                passenger_crew = waiting.pop(0)
                bus.append(passenger_crew)

        start_time += t

    # 마지막 버스 남는 자리 체크 후 꽉 차있으면 콘의 도착 시간 설정
    if len(bus) == m:
        con_waiting_time = bus.pop() - 1
    else:  # 꽉 차있지 않으면 버스의 마지막 도착시간을 콘의 시간으로 설정
        con_waiting_time = start_time - t

    # formatting
    hour = con_waiting_time // 60
    minute = con_waiting_time % 60
    if hour < 10:
        hour = '0' + str(hour)
    else:
        hour = str(hour)

    if minute < 10:
        minute = '0' + str(minute)
    else:
        minute = str(minute)

    answer = hour + ':' + minute

    return answer

 

'1day-1algorithm' 카테고리의 다른 글

좌표 정렬하기  (0) 2021.05.16
부녀회장이 될테야  (0) 2021.05.07
신규 아이디 추천  (0) 2021.04.23
ACM 호텔  (0) 2021.04.20
달팽이는 올라가고 싶다  (0) 2021.04.19