안드 공부를 해볼까?

[Java] 프로그래머스 이중우선순위큐 본문

알고리즘/프로그래머스

[Java] 프로그래머스 이중우선순위큐

문바리 2022. 5. 5. 09:27
728x90

1. 문제 파악

기존 우선순위 큐에서 최댓값까지 구해야하는 문제다.

다른 언어는 모르겠지만 Java에서는 Comparator.reverseOrder()를 통해 역으로 정렬이 가능하다.

그래서 나는 우선순위 큐를 2개 사용해서 값을 구했다.

2. 구현

import java.util.*;

class Solution {
    public int[] solution(String[] operations) {
        int[] answer = {0,0};
        PriorityQueue<Integer> maxQueue = new PriorityQueue<>(Comparator.reverseOrder());
        PriorityQueue<Integer> minQueue = new PriorityQueue<>();
        
        for(String operation : operations){
            String[]oper = operation.split(" ");
            //명령어 구분
            switch(oper[0]){
                case "I":
                    //데이터 추가
                    maxQueue.offer(Integer.valueOf(oper[1]));
                    minQueue.offer(Integer.valueOf(oper[1]));
                    break;
                case "D":
                    //최대값 삭제
                    if(oper[1].equals("1")){
                        if(!maxQueue.isEmpty()){
                            int delete = maxQueue.poll();
                            minQueue.remove(delete);
                        }
                    }
                    //최소값 삭제
                    else{
                        if(!minQueue.isEmpty()){
                            int delete = minQueue.poll();
                            maxQueue.remove(delete);
                        }
                    }
                    break;
            }
        }
        if(!minQueue.isEmpty()){
            answer[0] = maxQueue.poll();
            answer[1] = minQueue.poll();
        }
        return answer;
    }
}

문제가 생각보다 간단하다. 최대값을 삭제한다고 하면 역순으로 정렬하는 우선순위 큐에서 값을 가져오고 그 값을 그냥 우선순위 큐도 삭제를 해준다.

3. 마무리

이번 문제는 Level 3이라길래 조금 힘들겠구나 싶었는데 앞서 본 문제가 더 어려운 느낌이 들었다.

알고리즘을 더 많이 풀어야겠다..

반응형
Comments