반응형
✨ 문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=java
✨ 문제 설명

💡 접근 방법: PriorityQueue로 최대 우선순위 추적하기
이 문제는 가장 높은 중요도를 가진 문서를 먼저 처리해야 하므로
우선순위 큐(PriorityQueue)를 이용하면 효율적으로 해결할 수 있습니다.
하지만 Java의 PriorityQueue는 기본적으로 최소 힙(작은 값이 먼저 나오는 구조) 으로 동작합니다.
따라서 최대값이 먼저 나오게 하려면 Collections.reverseOrder()를 사용해야 합니다.
✅ 코드 풀이
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
// 우선순위가 높은 순서대로 꺼내기 위해 최대 힙 선언
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
// 전체 우선순위를 큐에 넣음
for(int num : priorities) {
pq.add(num);
}
// 큐가 빌 때까지 반복
while(!pq.isEmpty()) {
for(int i = 0; i < priorities.length; i++) {
// 현재 문서가 가장 높은 우선순위인 경우
if(priorities[i] == pq.peek()) {
pq.poll(); // 꺼냄
answer++; // 출력된 문서 수 증가
if(i == location) // 찾는 문서라면
return answer;
}
}
}
return answer;
}
}
🔍 핵심 포인트 정리
1. PriorityQueue란?
PriorityQueue는 우선순위가 높은 요소를 먼저 처리하는 큐입니다.
일반적인 Queue가 FIFO(First-In-First-Out) 구조인 것과 달리,
PriorityQueue는 내부적으로 힙(Heap) 자료구조를 사용해
우선순위가 높은 값(기본적으로는 작은 값) 을 먼저 꺼내도록 설계되어 있습니다.
2. Collections.reverseOrder()
- reverseOrder()를 사용하면 내림차순, 즉 가장 큰 수가 먼저 나옵니다.
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
이렇게 선언하면 가장 큰 값부터 꺼내는 최대 힙처럼 동작합니다.
3. 문서의 위치 추적
- 우리는 특정 위치(location)에 있는 문서가 몇 번째로 인쇄되는지 알아야 하므로,
우선순위와 함께 해당 문서의 인덱스도 추적해야 합니다.
if (i == location) {
return answer;
}
이 조건을 통해, 우리가 찾고 있는 문서가 인쇄될 때의 순서를 반환할 수 있습니다.
반응형
'알고리즘 > Java' 카테고리의 다른 글
| [Leetcode] 3. Longest Substring Without Repeating Characters (0) | 2025.08.22 |
|---|---|
| [프로그래머스] 베스트앨범 - 42579 (Java) (0) | 2025.01.20 |
| [프로그래머스] 오픈채팅방 - 42888(Java) (0) | 2025.01.16 |
| [프로그래머스] 할인 행사 - 131127(Java) (0) | 2025.01.09 |
| [프로그래머스] 완주하지 못한 선수 - 42576(Java) (0) | 2025.01.07 |