https://school.programmers.co.kr/learn/courses/30/lessons/42587
문제
프로세스가 있을 경우 우선순위부터 먼저 처리, 이때 다음을 따른다. loc번째 프로세스는 몇번째에 처리되는가?
- 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
- 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
- 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
풀이
야매이긴 하다. 사실 정석적으로 Task라는 객체를 만들어 해볼려고 했으니 위의 조건으로 인해 찐빠가 났다.
결국 다음 방식으로 풀었다...
1) 우선순위 큐에 prior[]의 요소를 넣는다. 이때 Collections.reverseOrder() 방식으로 넣는다.
2) peek()가 어느번째인지 찾아서 찾으면 빼낸다. 이때 i가 loc이면 그게 답.
코드
import java.util.*;
class Solution {
public int solution(int[] prior, int loc) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
for(int i : prior){
pq.add(i);
}
roop:while(!pq.isEmpty()){
for(int i=0; i<prior.length; i++){
if(prior[i]==pq.peek()){
pq.poll();
answer++;
if(i==loc) break roop;
}
}
}
return answer;
}
}