프로그래머스 - 이중우선순위 큐

J-Keonho·2020년 9월 11일
0
post-custom-banner

해당 알고리즘 자료는 제가 직접 푼 것도 있지만 다른 분들의 풀이과의 비교를 통해 더 나은 알고리즘을 공부하기 위해 정리한 것들입니다.

프로그래머스 - 이중우선순위 큐

https://programmers.co.kr/learn/courses/30/lessons/42628

풀이 : PriorityQueue를 2개로 사용하여 최대, 최소를 체크한다.

import java.util.*;
class Solution {
    public int[] solution(String[] operations) {
        PriorityQueue <Integer> max = new PriorityQueue<Integer> ((a,b) -> b-a);
	PriorityQueue <Integer> min = new PriorityQueue<Integer> ((a,b) -> a-b);
	int [] ans = new int[2];
	for (int i = 0; i < operations.length; i++) {
		String [] arr = operations[i].split(" ");
		if(arr[0].equals("I")) {
			max.add(Integer.parseInt(arr[1]));
			min.add(Integer.parseInt(arr[1]));
		}else {
			if(max.isEmpty() || min.isEmpty()) continue;
			if(arr[1].equals("1")) {
				int n = max.poll();
				min.remove(n);
			}else {
				int n = min.poll();
				max.remove(n);
			}
		}
	}
	if(!max.isEmpty()) ans[0] = max.peek();
	if(!min.isEmpty()) ans[1] = min.peek();
        return ans;
   }
}
profile
안녕하세요.
post-custom-banner

0개의 댓글