priority queue 사용
priority queue에 데이터 저장 -> 우선순위대로 저장됨
원본 데이터와 큐에 저장된 값을 비교하면서 순서 계산
priorities = {2, 1, 3, 2} 가 입력으로 주어질 때,
queue = {3, 2, 2, 1} (우선순위 큐)
모든 원소의 프린트 순서
while | for - i | queue | queue.peek() | priorities[i] | result |
---|---|---|---|---|---|
1st | 0 | {3, 2, 2, 1} | 3 | 2 | 0 |
1st | 1 | {3, 2, 2, 1} | 3 | 1 | 0 |
1st | 2 | {3, 2, 2, 1} | 3 | 3 | 1 |
1st | 3 | {2, 2, 1} | 2 | 2 | 2 |
2nd | 0 | {2, 1} | 2 | 2 | 3 |
2nd | 1 | {1} | 1 | 1 | 4 |
이 문제에서는 location 인덱스에 해당하는 값의 출력 순서를 리턴하면 됨 -> if(i == location) return result;
import java.util.*;
public class Printer {
public int solution(int[] priorities, int location) {
PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
int result = 0;
for (int priority : priorities) {
queue.add(priority);
}
while (!queue.isEmpty()) {
for (int i = 0; i < priorities.length; i++) {
if (queue.peek() == priorities[i]) {
result++;
queue.poll();
if (i == location) return result;
}
}
}
return result;
}
public static void main(String[] args) {
Printer printer = new Printer();
System.out.println(printer.solution(new int[]{2, 1, 3, 2}, 0));
System.out.println(printer.solution(new int[]{1, 1, 9, 1, 1, 1}, 0));
}
}