문제 조건
처음에 그냥 큐를 이용해 중요도를 확인하면서 낮으면 빼서 뒤로 보내고 하다가 조금 복잡해졌다.
그러다 우선순위 큐가 떠올랐고 중요도를 기준으로 내림차순 정렬하고 priorities 배열과 비교하면서 문제를 해결했다.
import java.util.Comparator;
import java.util.PriorityQueue;
public class Printer {
public static void main(String[] args) {
int[] p1 = {2, 1, 3, 2};
int l1 = 2;
System.out.println(solution(p1, l1));
int[] p2 = {1, 1, 9, 1, 1, 1};
int l2 = 0;
System.out.println(solution(p2, l2));
}
public static int solution(int[] priorities, int location) {
// 중요도를 기준으로 내림차순 정렬
PriorityQueue<Integer> q = new PriorityQueue<>(Comparator.reverseOrder());
for (int p : priorities) {
q.add(p);
}
int answer = 0;
while (!q.isEmpty()) {
for (int i = 0; i < priorities.length; i++) {
// 큐 맨 앞에 있는 중요도와 priorities[i]가 같은 경우 순서 증가시킴
if (q.peek() == priorities[i]) {
answer++;
q.poll();
// 현재 위치와 요청한 문서의 위치가 같을 경우 바로 return
if (i == location) {
return answer;
}
}
}
}
return answer;
}
}
https://github.com/MinchaeKwon/Programmers/blob/master/Level2/src/Printer.java