Programmers - 프린터(Java)_21.06.15.화

프로그래머스 - 프린터

문제

풀이

접근방법

처음에는 Stack을 이용하여서 풀려고 하였으나 구현하는 단계에서 막혔습니다. 그러던 와중에 우선순위큐에 대해서 떠올라서 검색을 참고하여서 구현을 시작했습니다.

  1. PriorityQueue를 Integer형으로 선언합니다.
    -> 선언 시 Collections.reverseOrder()를 이용하여 문제의 조건에 맞게 우선순위를 결정합니다.
  2. PriorityQueue에 배열의 값을 offer 합니다.
  3. While문을 선언하고 Queue가 Empty가 될 때까지 수행합니다.
  4. While문 안에서는 for문을 선언하여서 배열의 값과 Queue의 Peek() 값을 비교합니다. 동일하면 Poll을 선언하고 answer의 값을 1추가합니다.
  5. 그리고 location과 i의 값이 동일하다면 Queue를 초기화(clear())하고 While문을 종료합니다.

아래에 코드를 올렸습니다.

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        PriorityQueue<Integer> prior = new PriorityQueue<>(Collections.reverseOrder());
         
        for(int number:priorities){
            prior.offer(number);
        }
        
        while(!prior.isEmpty()){
            for(int i = 0; i < priorities.length; i++){
                if(prior.peek() == priorities[i]){
                    prior.poll();
                    answer++;
                    
                    if(location == i){
                        prior.clear();
                        break;
                    }
                }
            }
        }
        return answer;
    }
}

좋은 웹페이지 즐겨찾기