https://programmers.co.kr/learn/courses/30/lessons/42628?language=java
풀이
- 우선순위큐(heap)을 오름차순, 내림차순(Collections.reverseOrder()) 기준으로 하나씩 만든다
- 삽입의 경우 두 heap에 각각 넣어준다
- 최대값 삭제의 경우 내림차순 우선순위큐에서 최대값을 찾아서 두 heap에 remove 한다
- 최소값 삭제의 경우 오름차순 우선순위큐에서 최솟값을 찾아서 두 heap에 remove 한다
- 결과값을 출력하는데 heap이 empty가 아닐 경우에만 값을 넣어 출력한다
import java.util.*;
class Solution {
public int[] solution(String[] operations) {
int[] answer = new int[2];
PriorityQueue<Integer> q1 = new PriorityQueue<>(); // 오름
PriorityQueue<Integer> q2 = new PriorityQueue<>(Collections.reverseOrder()); // 내림
// 문자열 처리
for(String operation : operations){
// 삽입
if(operation.substring(0,1).equals("I")){
int temp = Integer.valueOf(operation.substring(2));
q1.add(temp);
q2.add(temp);
}
// 최대값 삭제
else if(operation.equals("D 1")){
// 진행 불가 시
if(q2.isEmpty()){
continue;
}
// 삭제
int max = q2.peek();
q1.remove(max);
q2.remove(max);
}
// 최소값 삭제
else if(operation.equals("D -1") ){
// 진행 불가 시
if(q1.isEmpty()){
continue;
}
// 삭제
int min = q1.peek();
q1.remove(min);
q2.remove(min);
}
}
// 값이 있을 경우
if(!q1.isEmpty()){
answer[0] = q2.peek(); // 최대
answer[1] = q1.peek(); // 최소
}
return answer;
}
}
'Archived(CSE Programming) > 알고리즘(Java)' 카테고리의 다른 글
프로그래머스 - 디스크 컨트롤러(Java, LV3) / Heap (0) | 2020.10.22 |
---|---|
프로그래머스 - 카카오프렌즈 컬러링북(Java, 2017카카오) (0) | 2020.10.21 |
프로그래머스 - 문자열 압축(Java, 2020 카카오) (0) | 2020.10.21 |
프로그래머스 - 삼각 달팽이(Java, LV2) (0) | 2020.10.20 |
프로그래머스 - 스킬트리(Java, LV2) (0) | 2020.10.20 |