본문 바로가기

프로그래머스(Java)/Level 2

[프로그래머스] 프로세스

728x90

문제 풀이 힌트

  1. 문제 이해:
    • 대기 큐에 있는 프로세스들의 우선순위에 따라 순서대로 실행됩니다.
    • 몇 번째에서 실행되는지 알고 싶을 때.
  2. 우선순위 관리:
    • 우선순위가 높은 프로세스가 먼저 실행됩니다. 이를 위해 우선순위 배열을 정렬하여 가장 높은 우선순위를 찾습니다.
  3. 큐(Queue) 사용:
    • 큐는 먼저 들어온 것이 먼저 나가는 구조입니다. 큐(Queue)를 모르신다면 문제 풀기 전에 보고 오시는 것을 추천합니다.
    • 큐를 사용하여 프로세스의 우선순위를 관리합니다.
  4. 로직 설명:
    • 가장 높은 우선순위의 프로세스가 실행될 때마다 출력 순서를 증가시키고, 타겟 프로세스의 인덱스를 감소시킵니다.
    • 타겟 프로세스가 실행되면 그때까지의 출력 순서를 반환합니다.
    • 만약 현재 프로세스가 가장 높은 우선순위가 아니라면, 해당 프로세스를 큐의 맨 뒤로 이동시켜야 합니다.
  5. 인덱스 관리:
    • 타겟 프로세스의 인덱스를 관리하여 프로세스가 큐에서 이동할 때마다 업데이트합니다. 타겟 인덱스가 0이 되면 해당 프로세스가 출력된 것입니다.

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int result = 0; // 출력 순서를 저장할 변수
        
        // 우선순위 배열을 복사하고 정렬하여 가장 높은 우선순위를 알 수 있게 함
        int[] sortedArray = priorities.clone();
        Arrays.sort(sortedArray);
        
        // 큐를 사용하여 우선순위 배열을 저장
        Queue<Integer> queue = new LinkedList<>();
        for (int n : priorities) {
            queue.add(n);
        }
        
        int point = priorities.length - 1; // 가장 높은 우선순위의 인덱스
        int targetIndex = location; // 내가 궁금한 프로세스의 위치
        
        while (true) {
            // 큐의 첫번째 요소가 현재 가장 높은 우선순위와 같다면
            if (sortedArray[point] == queue.peek()) {
                queue.poll(); // 큐에서 제거
                result++; // 출력 순서 증가
                point--; // 다음으로 높은 우선순위로 이동
                
                // 내가 궁금한 프로세스가 실행된 경우
                if (targetIndex == 0) {
                    return result; // 출력 순서 반환
                }
            } else {
                // 큐의 첫번째 요소를 맨 뒤로 이동
                queue.offer(queue.poll());
            }
            
            // 타겟 인덱스를 감소시키고, 0보다 작아지면 큐의 마지막 인덱스로 설정
            targetIndex = targetIndex - 1 >= 0 ? targetIndex - 1 : queue.size() - 1;
        }
    }
}
728x90

'프로그래머스(Java) > Level 2' 카테고리의 다른 글

[프로그래머스] 더 맵게  (0) 2024.07.16
[프로그래머스] 귤 고르기  (0) 2024.07.16
[프로그래머스] 멀리뛰기  (0) 2024.07.12
[프로그래머스] 의상  (0) 2024.07.09
[프로그래머스] 타겟넘버  (0) 2024.07.09