프로그래머스 셔틀버스 (Java,자바)

jonghyukLee·2022년 9월 18일
1

이번에 풀어본 문제는
프로그래머스 셔틀버스 입니다.

📕 문제 링크

❗️코드

import java.util.*;
class Solution {
    public String solution(int n, int t, int m, String[] timetable) {
        Queue<Integer> pq = new PriorityQueue<>();
        for (String time : timetable) {
            String [] tmp = time.split(":");
            int hour = Integer.parseInt(tmp[0]);
            int min = Integer.parseInt(tmp[1]);

            pq.add((hour * 60) + min);
        }
        int curTime = 9 * 60;
        int m_count = 0;
        int lastCrew = 0;
        for (int i = 0; i < n; i ++) {
            m_count = 0;

            while (!pq.isEmpty() && pq.peek() <= curTime) {
                m_count++; //한명 태우고
                lastCrew = pq.poll(); // 마지막 탑승객의 시간 갱신

                if (m_count == m) {
                    // 탑승객 꽉차면 다음 버스로
                    break;
                }
            }
            // 다음 배차시간
            curTime += t;
        }
        
        int answer = m_count == m ? lastCrew - 1 : curTime - t;

        return timeToString(answer);
    }
    static String timeToString(int time) {
        String hour = String.format("%02d", time / 60);
        String min = String.format("%02d", time % 60);
        return hour + ":" + min;
    }
}

📝 풀이

콘이 버스를 탈 수 있는 가장 늦은 시간을 출력하는 문제입니다.
결과를 구하기 위해 크게 두 가지 경우로 나눌 수 있습니다.
첫 번째 경우는, 마지막 n번째 버스가 도착했을 때, 해당 버스에 m만큼의 인원이 채워지지 못했다면 굳이 더 일찍 나갈 필요가 없기 때문에, 해당 버스 시간에 맞추어 나가면 됩니다.
두 번째 경우는, n번째 버스에 모든 인원이 다 태워진 경우입니다. 해당 경우에는, 버스에 탑승한 마지막 승객보다 1분 일찍 도착하면, 그 크루는 못타겠지만.. 콘은 마지막 승객이 될 수 있습니다.
위 두 가지 경우의 수를 고려하기 위해, 우선순위 큐를 활용하여 주어진 조건에 맞게 버스에 모든 탑승객을 태우고, 마지막 answer 변수에 두 경우를 비교하여 값을 담아주면 됩니다.

📜 후기

문제 내용이 재밌어서, 몰입하고 풀었던 것 같습니다 ㅎㅎㅎ 쉽지는 않았던 문제네요 ㅠ

profile
머무르지 않기!

0개의 댓글