힙(Heap)-이중우선순위큐 [JAVA]

LeHoODU·2023년 10월 31일
0
post-thumbnail


🔑두개의 우선순위큐를 선언하여, 최댓값과 최솟값을 고를수 있어야한다.

String[] arr = {"I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"};
        int[] answer = new int[2];
        //메인 큐
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        //서브 큐
        PriorityQueue<Integer> pqr = new PriorityQueue<>(Collections.reverseOrder());

        for (int i =0; i<arr.length ; i++){
        	//구분자 이용
            StringTokenizer st = new StringTokenizer(arr[i]," ");
            //부호
            String a = String.valueOf(st.nextElement());
            //숫자
            String b = String.valueOf(st.nextElement());
            
            //인서트인 경우, 메인큐에 삽입후, 서브큐 초기화 후 인서트
            if (a.equals("I")) {
                pq.add(Integer.parseInt(String.valueOf(b)));
                pqr.clear();
                for (Integer l : pq) pqr.add(l);
            }
            
            //최솟값 삭제 시, 메인큐 poll()
            if (a.equals("D") && b.equals("-1")) pq.poll();
            
            //최댓값 삭제 시, 서브큐 초기화 후 메인큐 데이터 삽입 그리고 poll() 한 후 pq에 다시 서브큐 데이터 삽입
            if (a.equals("D") && b.equals("1")){
                pqr.clear();
                for (Integer j : pq) pqr.add(j);
                pqr.poll();
                pq.clear();
                for (Integer p : pqr) {
                    pq.add(p);
                }
            }
        }
        if (pq.size() == 0){
        	answer[0] = 0;
            answer[1] = 0;
        }
        else{
            answer[0] = pqr.poll();
            answer[1] = pq.poll();
        }
```![](https://velog.velcdn.com/images/laeho47/post/77784fab-3fe1-4aca-a4da-5e8e4b40878c/image.png)
![](https://velog.velcdn.com/images/laeho47/post/841f9d1c-3ee3-44c6-94ed-34e5be294cf2/image.png)
profile
Back-End Developer

0개의 댓글