이번 문제는 셔틀버스 문제이다.
운행되는 셔틀은 아래와 같은 규칙으로 운행된다
09:00 부터 총 n 회 t 분 간격으로 역에 도착하며, 하나의 셔틀버스에는 최대 m명의 승객이 탑승 가능하다.
셔틀은 도착한 순간의 대기열에 선 크루(직원)까지 포함해서 순서대로 태우고 바로 출발한다.
이때 콘이 무사히 셔틀을 타고 사무실로 갈 수 있는 제일 늦은 도착시간을 출력해야 한다.
입출력 예제를 통해 문제를 다시 되집어 보자.
먼저 입출력 예제 1
n = 1 즉 1회 운행되며, t는 1, 1분 간격으로 역에 도착한다. 여기서 n 은 1 이기 때문에 t는 의미가 없다.
m =5, 총 5명의 승객을 태울 수 있으며, timetable 에는 총 4명의 사람들이 대기하고 있다. 따라서 콘은 "09:00"에 정류장에 타나면 셔틀을 탈 수 있다.
입출력 예제 2
셔틀은 09:00 부터 총 2회 10분 간격으로 정류장에 도착한다. 즉 09:00 1회, 09:10 이 마지막이다. 또한 탑승 정원은 2명이다. 이때 timetable을 살펴보면 08:00 에 정류장에 도착한 사람만 첫 셔틀에 탑승하고 09:10, 09:09 두 명의 사람은 09:10 셔틀을 기다리게 된다. 따라서 콘은 09:10분보다 먼저 도착해야만 셔틀을 탈 수 있다. 따라서 09:09 가 된다.
입출력 예제 3
셔틀은 09:00 부터 총 2회 1분 간격으로 정류장에 도착한다. 09:00, 09:01 두번 운행된다. 탑승 정원은 2명이다.
09:00 에 이미 4명의 사람이 줄을 서기 때문에, 콘이 셔틀을 이용하려면 08:59분에 줄을 서야 한다.
입출력 예제 4
셔틀은 09:00 에 딱 한번 도착하며, 정류장에는 버스 정원만큼의 사람들이 같은 시간에 이미 줄을 서 있다. 따라서 줄은 선 사람보다 1분 일찍 도착해야 한다.
입출력 예제 5
셔틀은 09:00 에 딱 한번 도착하며, 도착시간 전에 버스 정원만큼의 사람이 기다리지 않는다. 따라서 09:00에 맞춰서 콘은 도착하면 된다.
입출력 예제 6
셔틀은 총 10회 60분 간격으로 운행된다. 즉 09:00을 시작으로 18:00 이 마지막 셔틀이다. 마지막 셔틀 도착시간 전까지 셔틀 정원만큼 기다리는 사람이 없기 때문에 콘은 마지막 셔틀 도착 시간 18:00에 맞춰서 도착하면 된다.
이렇게 글로 작성을 하는 순간에 문제에 대한 해결법이 떠올랐다.
바로 코드로 작성해 보자.
코드가 길어져서 두장으로 짤랐다.
먼저 전달받은 timetable 에서 시간정보를 얻어 waiting 배열에 전달하고, 오름차순 정렬로 줄을 세워둔다.
그리고 이제 배차시간에 맞춰서 bus 라는 배열에 bus의 도착 시간을 전달한다.
이중 반복문을 통해 해당 버스를 대상으로 승객들을 태우게 되는데, 이때 take 의 역활은 마지막 버스의 승객 정보를 전달하는 것이다. 또한 승객이 탑승할때마다 k 값을 증가시켜주어 다음 bus[i]를 기준으로 반복문이 작동할 때, 중복된 승객 탑승을 막았다.
이제 조건문을 통해 반환할 값을 전달하게 되는데, 만약 take(마지막 버스)가 탑승 정원과 동일한 경우라면, 마지막에 탑승한 승객보다 1분 먼저 정류장에 도착해야 한다. 그러지 않은 경우라면 마지막 버스의 도착 시간에 맞추어 도착하면 된다.
문자열을 채우는 방법으로 str.rjust(2,'0')를 사용하였다. 만약 표현하고자 하는 문자열의 길이가 2 미만 이라면 비워진 자릿수만큼 '0'으로 채울 수 있다.
'프로그래머스 퀴즈(Python) > level 3' 카테고리의 다른 글
23.03.02 파이썬 코딩 퀴즈#179 디스크 컨트롤러(프로그래머스 스쿨) (0) | 2023.03.02 |
---|---|
23.03.01 파이썬 코딩 퀴즈#179 베스트앨범(프로그래머스 스쿨) (0) | 2023.03.01 |
23.03.01 파이썬 코딩 퀴즈#177 추석 트래픽(프로그래머스 스쿨) (0) | 2023.03.01 |
23.02.28 파이썬 코딩 퀴즈#176 숫자 게임(프로그래머스 스쿨) (0) | 2023.02.28 |
23.02.28 파이썬 코딩 퀴즈#175 기지국 설치(프로그래머스 스쿨) (0) | 2023.02.28 |