CODING TEST

프로그래머스 고득점 Kit - 스택/큐 프로세스

우진하다 2023. 7. 22. 09:58

풀이.

- prioirities 배열의 인덱스와 배열의 요소를 갖는 Process 클래스 생성
- 생성된 Process 객체를 큐에 담기
- 큐가 비어있을 때 까지 while문 돌리기
- 큐 poll() 한 process 객체를 만들고
- for each문을 돌며 process의 priority 와 큐에 존재하는 prioirity를 비교
- process의 priority가 큐에 남아있는 priority 작다면 다시 큐에 offer(process)
- process null 변경해주고 for each문 멈춤
- process가 null 이 아니라면 가장 우선순위에 있는 프로세스가 실행되고 종료됨을 의미하기에
- answer++ 하면서 process의 idx와 location을 비교해 일치한다면 answer return;

import java.util.Queue;
import java.util.LinkedList;

class Process {
    int idx;
    int priority;
    
    public Process(int idx, int priority) {
        this.idx = idx;
        this.priority = priority;
    }
}

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<Process> queue = new LinkedList<>();
        
        for (int i = 0; i < priorities.length; i++) {
            queue.offer(new Process(i, priorities[i]));
        }
        
        while (!queue.isEmpty()) {
            Process process = queue.poll();
            for (Process p : queue) {
                if (process.priority < p.priority) {
                    queue.offer(process);
                    process = null;
                    break;
                }
            }
            if (process != null) {
                answer++;
                if (process.idx == location) {
                    return answer;
                }
            }
        }
        
        return answer;
    }
}