[lv.2] 프로세스

RTUnu12·2024년 2월 19일
0

Programmers

목록 보기
9/41

https://school.programmers.co.kr/learn/courses/30/lessons/42587

  • 문제
    프로세스가 있을 경우 우선순위부터 먼저 처리, 이때 다음을 따른다. loc번째 프로세스는 몇번째에 처리되는가?

    1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
    2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
    3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
      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;
    }
}
profile
이제 나도 현실에 부딪힐 것이다.

0개의 댓글