본문 바로가기
알고리즘/문제 풀이

프로그래머스. 프로세스

by 위대한초밥V 2023. 10. 6.

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

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

programmers.co.kr

설명

처음에는 프로세스의 index와 우선순위를 모두 가지고 있어야 한다고 생각해서, arraylist를 사용하려고 했다. 

하지만 우선순위 큐(원소를 넣으면 value로 정렬되는 큐)를 사용하면 프로세스를 우선순위에 따라 쉽게 다룰 수 있다.

  • 내부에 for문을 선언하여 priorities를 순차적으로 탐색한다.
  • 현재 큐 제일 앞에 위치한 우선순위와 priorities에 담긴 우선순위를 비교하고, 일치하는게 있다면 poll()을 통해 제거해주고 answer를 증가시킨다.(answer는 몇번째로 제거되었는지를 의미하므로!)
  • 이 과정을 반복하여 원하는 위치의 원소를 찾으면(i == location) 값을 return한다.

코드

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());	
        // 내림차순 정렬
		
        for(int num : priorities) {
        	pq.add(num);
		}
        while(!pq.isEmpty()) {
        	for(int i = 0; i < priorities.length; i++) {
            	if(priorities[i] == pq.peek()) {
                	pq.poll();
                    answer++;
                    if(i == location)
                    	return answer;
					}
                }   
            }               
            return answer;
      }
}
반응형