유블로그

[프로그래머스] 이중우선순위큐 본문

알고리즘

[프로그래머스] 이중우선순위큐

yujeong kang 2021. 1. 3. 14:34

프로그래머스 level3 이중우선순위큐

 

소요시간 : 15분

 

무식하게 문제가 하라는대로만 푼 거 ㅎ

최소값 제거할 때는 마지막 값 빼고 리스트에 다 넣어서 다시 pq 에 넣었다 ㅋㅋㅋㅋㅋㅋ

 

마지막에 답 return 할 때는 최댓값은 peek으로 하고 최소값은 전부 다 poll 해서 마지막값했다

최댓값 peek 한 이유는 pq 사이즈가 1이어서 최대==최소 인 경우가 있을까봐..

 

그런데 풀고나서 다른 사람들 풀이보이 pq 를 두 개 써서 하나는 최대힙, 다른 하나는 최소힙으로 만들어서 했던데 그게 훨씬 효율적이고 깔끔하고 좋을듯 ㅎㅎ

import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;

class Solution {
    public int[] solution(String[] operations) {
        PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2)->(o2-o1));

        for (int i = 0; i < operations.length; i++) {
            switch(operations[i].charAt(0)) {
            case 'I':
                pq.offer(Integer.parseInt(operations[i].substring(2)));
                break;
            case 'D':
                if(operations[i].charAt(2)-'0' == 1) {
                    pq.poll();
                }
                else {
                    int size = pq.size();
                    List<Integer> list = new ArrayList<>();
                    for (int q = 0; q < size-1; q++) {
                        list.add(pq.poll());
                    }
                    pq.poll();
                    for (int j = 0; j < list.size(); j++) {
                        pq.add(list.get(j));
                    }
                }
                break;
            }
        }

        if(pq.size() == 0) return new int[] {0,0};
        int[] answer = new int[2];
        answer[0] = pq.peek();
        int last = 0;
        while(!pq.isEmpty()) {
            last = pq.poll();
        }
        answer[1] = last;
        return answer;
    }
}

'알고리즘' 카테고리의 다른 글

[프로그래머스] 소수찾기  (0) 2021.01.04
[프로그래머스] 모의고사  (0) 2021.01.03
[프로그래머스] 디스크컨트롤러  (0) 2021.01.02
[프로그래머스] K번째수  (0) 2020.12.26
[프로그래머스] 프린터  (0) 2020.12.23