[Java] 프로세스

allzeroyou·2025년 1월 23일
0

Java-Algorithm

목록 보기
17/26
post-thumbnail

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;
    }
}
profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글