[99클럽 코테 스터디 4주차 보너스문제 TIL] 프로그래머스 이중우선순위큐

말하는 감자·2024년 11월 21일
0
post-thumbnail

99클럽 코테 스터디 4주차 보너스문제 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 힙(우선순위 큐)

📌 공부한 내용

📍 오늘의 문제

📍작성 코드

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

class Solution {
    public int[] solution(String[] operations) {
        
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
        
        for(String operate : operations) {
            StringTokenizer st = new StringTokenizer(operate);
            String command = st.nextToken();
            int number = Integer.parseInt(st.nextToken());
            
            switch(command) {
                case "D" :
                    if(minHeap.isEmpty() || maxHeap.isEmpty()) break;
                    if(number == 1) {
                        int max = maxHeap.poll();
                        minHeap.remove(max);
                    } else {
                        int min = minHeap.poll();
                        maxHeap.remove(min);
                    }
                    break;
                case "I" :
                    minHeap.add(number);
                    maxHeap.add(number);
                    break;
            }
        }
        
        int maxAnswer = maxHeap.isEmpty() ? 0 : maxHeap.poll();
        int minAnswer = minHeap.isEmpty() ? 0 : minHeap.poll();
        
        int[] answer = {maxAnswer, minAnswer};
        
        return answer;
    }
}

📌 오늘의 회고

이름부터가 이중우선순위큐라서 아 우선순위 큐를 두개 쓰면 되는구나하고 힌트를 얻어갔다.

그래서 우선순위 큐를 오름차순과 내림차순으로 각각 minHeapmaxHeap으로 만들어서 operations에 있는 연산들을 실행시켰다.

foreach문으로 operations을 하나씩 살피면서 "D"로 시작할 경우 minHeapmaxHeap이 비어있는지 확인 후 비어있다면 연산을 패스하고 값이 있다면 "1"인지 "-1"인지에 따라 최대값, 최소값을 삭제해줬다.
"I"로 시작할 경우에는 minHeapmaxHeap에 각각 값을 추가해줬다.

minHeapmaxHeap가 비어있다면 0을 아니라면 각각의 최소값, 최대값을 추출하여 answer배열에 넣어주면서 마무리 했다.

profile
나는 말하는 감자다

0개의 댓글

관련 채용 정보