[프로그래머스] 입국심사

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/43238

접근 방식

Judge라는 클래스를 생성하여, 심사위원 별 심사 시간과 대기 시간을 관리한다.

대기 시간과 심사 시간을 합했을 때, 가장 적은 쪽에서 심사를 받는 것이 빠르게 심사를 받을 수 있는 방법이다.

잘못된 접근

import java.util.*;

class Solution {
    class Judge {
        int time; // 심사 시간
        int wait; // 현재 대기 시간
        Judge(int time, int wait) {
            this.time = time;
            this.wait = wait;
        }
    }

    public long solution(int n, int[] times) {
        long answer = 0;

        PriorityQueue<Judge> pq = new PriorityQueue<>((a, b) -> (a.time + a.wait) - (b.time + b.wait));

        // 각 심사위원 초기화
        for (int time : times) {
            pq.offer(new Judge(time, 0));
        }

        // 모든 사람이 심사를 받을 때까지
        while (n > 0) {
            // 가장 빨리 끝나는 심사위원 선택
            Judge cur = pq.poll();

            // 심사 종료 시간 갱신
            cur.wait += cur.time;

            // 정답 갱신 (최대 심사 시간 추적)
            answer = Math.max(answer, cur.wait);

            // 갱신된 심사위원 다시 추가
            pq.offer(cur);

            // 남은 사람 수 감소
            n--;
        }

        return answer;
    }
}

주어진 테스트는 통과했지만, 제출해 보니 일부 실패도 뜨고 대부분의 결과에서는 시간 초과가 발생했다.

실패도 발생한 것으로 보아 로직 자체가 틀린 것으로 보인다.

지금 현재 ㄹ

잘못 된 접근2

잘 된 접근

결과

소스 코드


다른 접근 방식

알게 된 점