[프로그래머스 / JAVA] 이중우선순위큐 Lv.3 풀이
by 효기’s
문제
이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다.
이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때,
모든 연산을 처리한 후 큐가 비어 있으면 [0,0]
비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요.
제한 사항
operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
operations의 원소는 큐가 수행할 연산을 나타냅니다.
원소는 "원소는 “명령어 데이터” 형식으로 주어집니다.
최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.
입출력 예
풀이 과정
① 최대, 최소 Queue를 찾아야 하기때문에 PriorityQueue를 사용해야 하며
minHeap(최소 힙), maxHeap(최대 힙) 총 두개로 이중 Integer로 선언합니다.
② 반복문을 사용하여 split (" ")로 operations의 문자열을 잘라 배열 arrNum에 넣습니다.
③ if 조건문으로 만약 arrNum[0] (첫번째 명령어) 가 I 일때
minHeap과 maxHeap에 이중으로 arrNum[1] 의 값을 int로 형변환하여 넣습니다.
④ 같은 방법으로 명령어가 D 1 일때 최대 Heap이 비어있는지 확인하고 최대 Heap을 poll 명령을 사용하여 최댓값을 추출해서 remove 명령을 사용 후 minHeap 최댓값을 삭제합니다.
⑤ 4번과 같은 방법으로 D -1 일때 최소 Heap이 비어있는지 확인하고 최소 Heap을 poll 명령을 사용하여 최솟값을 추출해서 remove 명령을 사용 후 maxHeap 최솟값을 삭제합니다.
⑥ 출력할때는 최댓값, 최솟값이 나와야 하므로 배열 0, 1으로 answer[0] answer[1]을 각각 나눴습니다.
삼항연산자로 최대 Heap이 비어있으면 0을 출력 그렇지 않다면 peek()을 사용하여 최대 Heap 출력합니다.
최솟값도 동일하게 진행합니다.
전체 코드
import java.util.*;
class Solution {
public static int[] solution(String[] operations) {
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(java.util.Collections.reverseOrder());
for (String operation : operations) {
String[] arrNum = operation.split(" ");
if (arrNum[0].equals("I")) {
minHeap.add(Integer.parseInt(arrNum[1]));
maxHeap.add(Integer.parseInt(arrNum[1]));
} else if (arrNum[0].equals("D") && arrNum[1].equals("1")) {
if (!maxHeap.isEmpty()) {
int maxValue = maxHeap.poll();
minHeap.remove(maxValue);
}
} else if (arrNum[0].equals("D") && arrNum[1].equals("-1")) {
if (!minHeap.isEmpty()) {
int minValue = minHeap.poll();
maxHeap.remove(minValue);
}
}
}
int[] answer = new int[2];
answer[0] = maxHeap.isEmpty() ? 0 : maxHeap.peek();
answer[1] = minHeap.isEmpty() ? 0 : minHeap.peek();
return answer;
}
}
결과
'Studying > CodingTest' 카테고리의 다른 글
[프로그래머스 / JAVA] 네트워크 Lv.3 풀이 (0) | 2023.09.06 |
---|---|
[프로그래머스 / JAVA] 올바른 괄호 Lv.2 풀이 (0) | 2023.08.31 |
[프로그래머스 / JAVA] 정수삼각형 Lv.3 풀이 (2) | 2023.08.30 |
블로그의 정보
감성 개발자 효기
효기’s