카테고리 없음

[프로그래머스 | Java Lv.2] [복습] 이중우선순위큐(힙 Heap)

Trudy | 송연 2024. 6. 11. 01:13

문제

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

 

프로그래머스

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

programmers.co.kr


 

우선순위 큐에서는 remove으로 원하는 원소를 지울 수 있다는 아주 유용한.. 메소드가 있다~~

 

최종코드

package week6.baek.heap;

import week2.baek.heap.Ex3;

import java.util.Collections;
import java.util.PriorityQueue;

public class TwowayPriorityQueue {
    public static int[] solution (String[] operations) {
        PriorityQueue<Integer> ascHeap = new PriorityQueue<>();
        PriorityQueue<Integer> desHeap = new PriorityQueue<>(Collections.reverseOrder());

        for(String s: operations){
            if(s.charAt(0) ==  'I'){
                System.out.println("I입니다");
                int num = Integer.parseInt(s.split(" ")[1]);
                System.out.println(num);
                ascHeap.offer(num);
                desHeap.offer(num);
            }
            else {
                System.out.println("D입니다");
                //최솟값 삭제
                if(s.split(" ")[1].equals("-1")) {
                    Integer i = ascHeap.poll();
                    System.out.println(i);
                    desHeap.remove(i);
                }

                //최댓값 삭제
                else{
                    Integer i = desHeap.poll();
                    System.out.println(i);
                    ascHeap.remove(i);
                }
            }
        }

        int[] result = new int[2];
        if(ascHeap.size() == 0) {
            return result;
        }

        result[0] = desHeap.poll();
        result[1] = ascHeap.poll();
        System.out.println(result[0] + " " + result[1]);
        return result;
    }

    public static void main(String[] args) {
        Ex3 ex3 = new Ex3();
        String[] operations = {"I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"};
        System.out.println(solution(operations));
    }
}