[프로그래머스] 프로세스

JOY·2023년 8월 23일
0

[CodingTest] Java

목록 보기
61/61

🫡 문제

프로그래머스 - 프로세스

🫡 코드

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        //우선순위 큐 - 높은 값이 우선순위가 됨
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        
        for(int process : priorities){
            pq.add(process);
        }
        
        while(!pq.isEmpty()){
            for(int i=0; i<priorities.length; i++){
                //i번째 배열과 가장 우선순위 값(pq.peek())과 같다면                
                if(priorities[i] == pq.peek()){ 
                    
                    //i와 찾고자 하는 프로세스의 인덱스가 같다면(동일한 프로세스)
                    if(i == location){  
                        return ++answer;
                    }
                    
                    //i와 찾고자 하는 프로세스의 인덱스가 같지 않다면(동일한 프로세스가 아님)
                    pq.poll();
                    answer++;
                }
            }
        }

        
        return answer;
    }
}

🫡 풀이

우선순위 큐

PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

숫자가 큰 값이 우선순위를 가지게 되므로
해당 코드를 사용해 내림차순, 즉 가장 큰 값이 우선순위를 가지도록 정렬

Collections.reverseOrder()

우선순위로 정렬된 큐에 들어있는 값의 인덱스가 찾고자하는 배열의 인덱스값과 동일한지 찾아야 한다.
1. 먼저 값이 동일한지 확인한다.
2. 값이 동일할 경우 인덱스값도 동일한지 확인한다.
3. 같을 경우 탐색을 중지한다.
4. 같지 않을 경우 가장 우선순위에 있는 값을 삭제하고 다시 탐색을 반복한다.

profile
Just Do IT ------- 🏃‍♀️

0개의 댓글

관련 채용 정보