| 문제 | 레벨 | 정답률 |
|---|---|---|
| 프로세스 | Lv.2 | 62% |
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
- 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
- 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
- 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다.
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Integer> queue = new LinkedList<>();
for (int priority : priorities) {
queue.add(priority);
}
while (!queue.isEmpty()) {
int current = queue.poll();
boolean isHighestPriority = true;
for (int priority : queue) {
if (priority > current) {
isHighestPriority = false;
break;
}
}
if (isHighestPriority) {
answer++;
if (location == 0) {
break;
} else {
location--;
}
} else {
queue.add(current);
if (location == 0) {
location = queue.size() - 1;
} else {
location--;
}
}
}
return answer;
}
}
나는 처음에 우선순위큐에서 각 값마다 내가 직접 우선순위를 지정하는 방법을 찾아보려고 했으나, 결론적으로는 실패했다.
그러다 gpt한테 물어보니 위와 같이 우선순위를 직접 지정하는 것이 아니라, 매번 가장 높은 우선순위 값인지 확인하는 방식을 제안해주었다.
여기서 내가 생각하지 못했던 부분은 location을 직접 1씩 줄여나가면서 위치를 앞으로 당기는 것이다.
애초에 location을 수정할 생각을 안했다 ,,
큐의 특성상 값이 나가면 location이 자동으로 당겨지기 때문에, 앞의 값을 빼내면 내가 찾는 위치도 당겨주어야 한다.
코드를 보면 그렇게 어렵지 않은데, 막상 구현하는 아이디어를 내기가 어려운 문제인 것 같다. 생각보다 정답률이 저조한 것을 보면,,