https://school.programmers.co.kr/learn/courses/30/lessons/42587
설명
처음에는 프로세스의 index와 우선순위를 모두 가지고 있어야 한다고 생각해서, arraylist를 사용하려고 했다.
하지만 우선순위 큐(원소를 넣으면 value로 정렬되는 큐)를 사용하면 프로세스를 우선순위에 따라 쉽게 다룰 수 있다.
- 내부에 for문을 선언하여 priorities를 순차적으로 탐색한다.
- 현재 큐 제일 앞에 위치한 우선순위와 priorities에 담긴 우선순위를 비교하고, 일치하는게 있다면 poll()을 통해 제거해주고 answer를 증가시킨다.(answer는 몇번째로 제거되었는지를 의미하므로!)
- 이 과정을 반복하여 원하는 위치의 원소를 찾으면(i == location) 값을 return한다.
코드
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;
}
}
반응형