본문 바로가기

ProgramSoliving

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

반응형

MaxHeap MinHeap 두개만들어서 사용하면된다.

java에서는 remove함수가 잇어서 log(n)으로 제거가능하다. 따라서 시간초과 걱정 X

package excercise;

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;

public class 이중우선순위큐 {
	public int[] solution(String[] operations) {
		Queue<Integer> MinHeap = new PriorityQueue<>();
		Queue<Integer> MaxHeap = new PriorityQueue<>(Comparator.reverseOrder());
		int[] answer = new int[2];

		for (String operation : operations) {
			StringTokenizer st = new StringTokenizer(operation);
			String order = st.nextToken();
			int num = Integer.parseInt(st.nextToken());

			if (order.equals("I")) {
				MinHeap.add(num);
				MaxHeap.add(num);
			} else if (!MaxHeap.isEmpty()) {
				if (num == 1) {
					int max = MaxHeap.poll();
					MinHeap.remove(max);
				} else {
					int min = MinHeap.poll();
					MaxHeap.remove(min);
				}
			}
		}

		if (MinHeap.isEmpty()) {
			answer[0] = 0;
			answer[1] = 0;
		} else {
			answer[0] = MaxHeap.poll();
			answer[1] = MinHeap.poll();
		}

		return answer;
	}
}
반응형

'ProgramSoliving' 카테고리의 다른 글

프로그래머스 : 섬 연결하기  (0) 2020.12.23
프로그래머스 : 모의고사  (0) 2020.12.21
프로그래머스 : 디스크컨트롤러  (0) 2020.12.18
프로그래머스 : 프린터  (0) 2020.12.17
프로그래머스 : 더맵게  (0) 2020.12.17