Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Android
- Kotlin
- SWEA
- java
- Parcelize
- 시뮬레이션
- 백준 퇴사
- EditorInfo
- 프로그래머스
- EditText
- 순수함수
- BuildConfig
- BFS
- 오르막수
- 자바
- 최단경로
- hilt
- 백준
- 약수 구하기
- Parcelable
- dfs
- 스카이라인 쉬운거
- val
- 조합
- 완전탐색
- 2501
- 순열
- 지능형 기차2
- 백준 14501
- imeOptions
Archives
- Today
- Total
안드 공부를 해볼까?
[Java] 프로그래머스 이중우선순위큐 본문
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이라길래 조금 힘들겠구나 싶었는데 앞서 본 문제가 더 어려운 느낌이 들었다.
알고리즘을 더 많이 풀어야겠다..
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 입국심사 (0) | 2022.05.10 |
---|---|
[Java] 프로그래머스 N으로 표현 (0) | 2022.05.08 |
[Java] 프로그래머스 K번째 수 (0) | 2022.05.05 |
[Java] 프로그래머스 디스크 컨트롤러 (0) | 2022.05.05 |
[Java] 프로그래머스 더 맵게 (0) | 2022.05.05 |
Comments