728x90
반응형
문제 링크
programmers.co.kr/learn/courses/30/lessons/42628
* 프로그래머스 - Level3..? - 우선순위큐 2개 이용
< 로직 >
* 우선순위 큐를 2개 만든다
* 하나는 최소값 관리 하나는 최대값 관리를 한다
* 삭제 명령이 들어오면 최소 최대 두개의 큐에서 모두 지워준다.
* 내가 이상하게 푼건가.. 조금 빈약해 보인다
import java.util.PriorityQueue;
import java.util.StringTokenizer;
class Solution {
public int[] solution(String[] operations) {
PriorityQueue<Integer> minPqueue = new PriorityQueue<Integer>();
PriorityQueue<Integer> maxPqueue = new PriorityQueue<Integer>(((o1,o2) -> Integer.compare(o2, o1)));
for(int i = 0; i < operations.length; i++) {
StringTokenizer stt = new StringTokenizer(operations[i]);
String command = stt.nextToken();
int num = Integer.parseInt(stt.nextToken());
switch(command) {
case "I": // 삽입
input(minPqueue, maxPqueue, num);
break;
case "D": // 삭제
delete(minPqueue, maxPqueue, num);
break;
}
}
int[] answer = new int[2];
// 출력
if(minPqueue.isEmpty()) answer[1] = 0;
else answer[1] = minPqueue.poll();
if(maxPqueue.isEmpty()) answer[0] = 0;
else answer[0] = maxPqueue.poll();
return answer;
}
private void delete(PriorityQueue<Integer> minPqueue, PriorityQueue<Integer> maxPqueue, int num) {
// 이거를 굳이 나눌 필요가 있었을까??
if(num == -1) { // 최소 삭제
if(!minPqueue.isEmpty()) {
int min = minPqueue.poll();
maxPqueue.remove(min);
}
} else { // 최대 삭제
if(!maxPqueue.isEmpty()) {
int max = maxPqueue.poll();
minPqueue.remove(max);
}
}
}
private void input(PriorityQueue<Integer> minPqueue, PriorityQueue<Integer> maxPqueue, int num) {
maxPqueue.offer(num);
minPqueue.offer(num);
}
}
반응형
'문제풀이 > Programmers 문제풀이' 카테고리의 다른 글
[ 알고리즘 ] 코딩 - Programmers - 소수찾기.java (0) | 2021.01.22 |
---|---|
[ 알고리즘 ] 코딩 - Programmers - 카펫.java (0) | 2021.01.21 |
[ 알고리즘 ] 코딩 - Programmers - H-index.java (2) | 2021.01.20 |
[ 알고리즘 ] 코딩 - Programmers - 위장.java (0) | 2021.01.15 |
[ 알고리즘 ] 코딩 - Programmers - 후보키.java (0) | 2021.01.13 |