본문 바로가기

CodingTEST

[프로그래머스] 프로세스 (JAVA)

반응형

프로그래머스 - [Level 2]  프로세스

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 분석

 

  • 프로세스가 대기 큐에 들어가 있다.
  • 이들에게는 우선순위도 주어진다.
  • 프로세스 대기큐 순서대로 우선순위가 담긴 배열이 주어졌을 때, 원하는 순번의 프로세스가 몇번째로 실행되는지 리턴해라.

해결 키 포인트

 

  • 스택/큐 사용
  • 큐에 우선순위와 인덱스가 주어진 class Process를 담는다
    • Process 의 인자로는 순서인 index와 중요도가 있다.
  • 주어진 우선순위 배열을 정렬한다.
    • 내림차순 정렬을 하고자 했지만 방법을 몰라 오름차순으로 정렬
      Arrays.sort(int [], Collections.reverseOrder()) 은 배열이 int [] 라 불가능했다.
      - int [] 는 primitive type | 이를 쓰기 위해서는 배열이 Generic Class(Integer [])이여야 한다.
  • 정렬된 우선순위 배열에서 len-count번째 수와 현재 꺼내진 수와 동일한지 판단
    • count 는 1로 초기화 
    • 다를 경우, 현재 뽑은 수는 뒤로 다시 넣고, 앞에 수 다시 빼고 반복
  • 이를 반복하면서 count 증가
  • 현재 뽑은 Process의 index가 순서를 원하는 프로세스일 경우 count 리턴

코드

 

import java.util.*;

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

        for (int i = 0; i < priorities.length; i++) {
            processes.add(new Process(i, priorities[i]));
        }

        Arrays.sort(priorities);

        int len = priorities.length;
        int count = 1;
        while (!processes.isEmpty()) {
            Process p = processes.poll();

            while(p.priority != priorities[len-count]) {
                processes.add(p);
                p = processes.poll();
            }

            if(p.index == location)
                break;

            count++;
        }

        return count;
    }

    public static class Process {
        int index;
        int priority;

        public Process(int index, int priority) {
            this.index = index;
            this.priority = priority;
        }
    }
}
반응형

'CodingTEST' 카테고리의 다른 글

[백준 2002] 추월(JAVA)  (0) 2024.02.11
[백준 9465] 스티커(JAVA)  (0) 2024.02.11
[프로그래머스] 기능개발 (JAVA)  (1) 2024.01.28
[프로그래머스] 의상 (JAVA)  (0) 2024.01.20
[백준 1991] 트리 순회(JAVA)  (0) 2024.01.16