[프로그래머스] 입국심사
문제 링크 : 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
잘 된 접근
결과
소스 코드