카테고리 없음
[프로그래머스 | 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));
}
}