[programmers] Java Lv.2 - 프로세스

2025. 2. 7. 10:19·Algorithm Solving/Java

https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제 설명

운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.

1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
  3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.

예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다.

현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • priorities의 길이는 1 이상 100 이하입니다.
    • priorities의 원소는 1 이상 9 이하의 정수입니다.
    • priorities의 원소는 우선순위를 나타내며 숫자가 클 수록 우선순위가 높습니다.
  • location은 0 이상 (대기 큐에 있는 프로세스 수 - 1) 이하의 값을 가집니다.
    • priorities의 가장 앞에 있으면 0, 두 번째에 있으면 1 … 과 같이 표현합니다.

 

입출력 예

입출력 예 설명
예제 #1
문제에 나온 예와 같습니다.

예제 #2
6개의 프로세스 [A, B, C, D, E, F]가 대기 큐에 있고 중요도가 [1, 1, 9, 1, 1, 1] 이므로 [C, D, E, F, A, B] 순으로 실행됩니다. 따라서 A는 5번째로 실행됩니다.

 


 

풀이

우선순위 큐 `PriorityQueue`

우선순위가 높은 프로세스를 실행한 후 그 다음 우선순위의 프로세스를 판단해야 함.

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

➡️ 프로세스를 종료(poll)할 때, PriorityQueue로 선언된 maxPriorities에서 해당 우선순위를 제거

➡️ 가장 높은 우선순위를 빠르게 찾을 수 있다.

 

풀이 코드

import java.util.*;

public class Main {
    static class Process {
        int index;
        int priority;

        Process(int index, int priority) {
            this.index = index;
            this.priority = priority;
        }
    }

    public static void main(String[] args) {
        int[] priorities = {1, 1, 9, 1, 1, 1};
        int location = 0;
        int answer = 0;

        Deque<Process> processes = new ArrayDeque<>();
        PriorityQueue<Integer> maxPriorities = new PriorityQueue<>(Collections.reverseOrder());
        for (int i = 0; i < priorities.length; i++) {
            processes.offer(new Process(i, priorities[i]));
            maxPriorities.offer(priorities[i]);
        }

        while (!processes.isEmpty()) {
            Process currentProcess = processes.poll();
            if (currentProcess.priority != maxPriorities.peek()) {
                processes.offer(currentProcess);
                continue;
            }

            answer ++;
            maxPriorities.poll();

            if (currentProcess.index == location) break;
        }

        System.out.println(answer);
    }
}

 


 

제출

import java.util.*;
class Solution {
    class Process {
        int index;
        int priority;
        Process(int index, int priority) {
            this.index = index;
            this.priority = priority;
        }
    }
    
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        Deque<Process> processes = new ArrayDeque<>();
        PriorityQueue<Integer> maxPriorities = new PriorityQueue<>(Collections.reverseOrder());
        for (int i = 0; i < priorities.length; i++) {
            processes.offer(new Process(i, priorities[i]));
            maxPriorities.offer(priorities[i]);
        }
        while (!processes.isEmpty()) {
            Process currentProcess = processes.poll();
            if (currentProcess.priority != maxPriorities.peek()) {
                processes.offer(currentProcess);
                continue;
            }
            answer ++;
            maxPriorities.poll();
            if (currentProcess.index == location) break;
        }
        
        return answer;
    }
}
저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv.2 - 타겟 넘버  (1) 2025.02.18
[programmers] Java Lv.2 - 피로도  (0) 2025.02.17
[programmers] Java Lv.2 - 기능개발  (0) 2025.01.27
[programmers] Java Lv.2 - 의상  (1) 2025.01.22
[programmers] Java Lv.2 - 할인 행사  (2) 2025.01.21
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv.2 - 타겟 넘버
  • [programmers] Java Lv.2 - 피로도
  • [programmers] Java Lv.2 - 기능개발
  • [programmers] Java Lv.2 - 의상
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    jQuery
    greedy
    Firebase
    GROUP BY
    CSS
    programmers
    프로그래머스
    그리디
    Subquery
    sql
    join
    DFS
    jwt
    다이나믹프로그래밍
    백준
    BOJ
    BFS
    백트래킹
    완전탐색
    자료구조
    websocket
    bootstrap
    HTML
    Google Fonts
    dp
    시뮬레이션
    mysql
    java
    jpa
    javascript
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv.2 - 프로세스
상단으로

티스토리툴바