https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=java
문제 설명
운영체제: 컴퓨터 시스템의 자원 효율적 관리
이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇번째로 실행되는지?
1. 큐에서 프로세스 하나 꺼내기
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면, 방금 꺼낸 프로세스를 다시 큐에 넣음.
3. 만약 그러한 프로세스가 없다면, 방금 꺼낸 프로세스 실행함.
- 프로세스 실행 후 큐에 다시 삽입 x
큐에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities, 몇 번째로 실행되는지 알고싶은 프로세스 위치: location.
-> 해당 프로세스 몇번째로 실행?
풀이
프로세스를 우선순위에 따라 순서대로 처리해야하므로, 우선순위 큐
사용.
for문을 순회하면서,
현재 우선순위 큐 제일 앞에 위치한 우선순위와 priorities에 담긴 우선순위 비교. 일치하는게 있다면 poll()을 통해 제거해준다.
그 다음 answer 증가.
이 과정을 반복하면서 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 pri: priorities){
pq.offer(pri); // 우선순위 큐에 추가
}
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;
}
}