[프로그래머스, 42587] 프로세스 (java)
Problem Solving/Programmers

[프로그래머스, 42587] 프로세스 (java)

728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

728x90

메모리: 71.7 MB, 시간: 1.48 ms

사용 알고리즘: 큐, 덱큐, 우선순위큐

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        
        // 인덱스 번호와 우선순위를 담은 배열을 넣을 큐
        Deque<int[]> deque = new ArrayDeque<>();
        for(int i = 0; i < priorities.length; i++) {
            deque.offerLast(new int[] {i, priorities[i]});
        }
        
        // 우선순위를 내림차순으로 정렬
        PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2) -> o2 - o1);
        for(int i = 0; i < priorities.length; i++) {
            pq.add(priorities[i]);
        }
        
        int[] now;
        int answer = 0;
        while(!deque.isEmpty()) {
            now = deque.pollFirst();
            
            // 우선순위가 가장 높은 프로세스가 아니라면
            if(now[1] != pq.peek()) {
                deque.addLast(now);
            }
            // 우선순위가 가장 높은 프로세스라면
            else {
                pq.poll();
                answer++;
                
                // 몇 번째로 실행되는지 알고 싶은 프로세스를 찾았다면
                if(now[0] == location) {
                    break;
                }
            }
        }
        
        return answer;
    }
}
728x90