본문 바로가기
Preparing Coding Test/Programmers L3

[Java/프로그래머스/힙(Heap)] 이중우선순위큐

by weero 2020. 10. 27.

문제

programmers.co.kr/learn/courses/30/lessons/42628

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

 

코드

woovictory.github.io/2018/03/19/JavaCollectionPriorityQueue/

 

[Java] Priority Queue

이번에는 Priority Queue에 대해서 공부를 해보았습니다.

woovictory.github.io

자바의 PriorityQueue는 우선순위가 가장 작은 값을 출력하는 함수만 있기 때문에 이를 어떻게 다뤄서 최댓값을 출력할지 고민해보면 된다.

나는 마지막 원소를 제외한 모든 원소를 ArrayList에 담아놓고, 마지막 원소도 삭제한 뒤에 ArrayList 안의 값들을 다시 pq에 옮겨줬다.

import java.util.*;
class Solution {
    public int[] solution(String[] operations) {
        int[] answer = new int[2];
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
        for(String op : operations){
            if(op.equals("D 1")){
                ArrayList<Integer> al = new ArrayList<>();
                int size = pq.size();
                for(int i=0; i<size; i++){
                    int num = pq.poll();
                    if(i<size-1){
                        al.add(num);
                    }
                }
                for(int i=0; i<al.size(); i++){
                    pq.add(al.get(i));
                }
            }else if(op.equals("D -1")){
                pq.poll();
            }else if(op.substring(0,1).equals("I")){
                int num = Integer.parseInt(op.split("\\s")[1]);
                pq.add(num);
            }
        }
        int resultPqSize = pq.size();
        for(int i=0; i<resultPqSize;i++){
            if(i==0)
                answer[1]=pq.poll();
            else if(i==resultPqSize-1)
                answer[0]=pq.poll();
            else
                pq.poll();
        }
        return answer;
    }
}