T_era

[JAVA] 큐 : 프로세스 본문

Programing/Programers

[JAVA] 큐 : 프로세스

블스뜸 2025. 4. 14. 20:59

1. 문제내용

요약
프로세스의 우선순위가 들어간 배열과 원하는 프로세스의 index가 주어지고
프로세스가 우선순위대로 실행하되 우선순위가 아닌 프로세스는 가장 뒤로 밀린다
이렇게 작동했을 때 index에 위치한 프로세스는 몇번째로 작동하는지 출력하라

2. 접근방법
 우선순위가 낮을 경우 마지막으로 이동을 생각했을 때 큐의 poll과 push를 이용해 값을 찾으면 될 것으로 보인다
 큐에 index를 모두 저장하고 배열과 비교하여 큐의 index보다 큰 값이 있으면 큐의 맨뒤에 다시 push하는 과정을 거치면   해결될 것 같다
 
3. 구현 과정

큐를 선언하고 배열의 크기만큼 index를 저장

Queue<Integer> queue = new LinkedList<>();

for(int i = 0; i < priorities.length; i++){
	queue.offer(i);
}

 

결과를 출력할 count와 큐가 비어있지 않으면 계속 반복
순차적으로 꺼내는 index와 배열의 전체를 하나씩 비교하면서 큐에서 꺼낸 값보다 큰 값이 나오면
큐를 다시 삽입하여 찾는 과정을 거친다

int count = 0;
while (!queue.isEmpty()){
    int current = queue.poll();
    boolean isMax = true;
    for(int index : queue){
        if(priorities[index] > priorities[current]){
            isMax = false;
            break;
        }
    }
    if(isMax){
        count++;
        if(current == location) return count;
    }else{
        queue.offer(current);
    }
}


4. 결과


전체 코드

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

class Solution {
    public int solution(int[] priorities, int location) {
        Queue<Integer> queue = new LinkedList<>();

        for(int i = 0; i < priorities.length; i++){
            queue.offer(i);
        }

        int count = 0;
        while (!queue.isEmpty()){
            int current = queue.poll();
            boolean isMax = true;
            for(int index : queue){
                if(priorities[index] > priorities[current]){
                    isMax = false;
                    break;
                }
            }
            if(isMax){
                count++;
                if(current == location) return count;
            }else{
                queue.offer(current);
            }
        }



        return count;
    }
}

'Programing > Programers' 카테고리의 다른 글

[JAVA] 힙 : 이중 우선순위 큐  (0) 2025.04.21
[JAVA] 스택 : 주식가격  (0) 2025.04.21
[JAVA] 스택 : 올바른 괄호  (1) 2025.04.14
[JAVA] 큐 : 기능개발  (0) 2025.04.14
[JAVA] 스택 : 같은 숫자는 싫어  (0) 2025.04.14