알고리즘/문제풀이
[프로그래머스] 42628 이중우선순위큐 - JAVA
LIRI
2025. 5. 31. 22:41
[프로그래머스] 42628 이중우선순위큐 - JAVA
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42628
문제 분석
조건
명령어 배열에 따라 우선순위 큐에 값을 넣거나 빼는 연산을 하게 된다. 모든 연산이 마쳤을 때 큐에 들어있는 값에서 `[최댓값, 최솟값]`을 출력하는 문제이다. 큐가 비어있다면 `[0, 0]`을 출력한다. 명령어는 아래와 같다.
`I 숫자` ➡️ 숫자를 큐에 삽입
`D 숫자` ➡️ 숫자가 1이면 최댓값, -1이면 최솟값 삭제
풀이방법
자동으로 정렬이 되는 `TreeMap`을 사용하였다. 키값을 기준으로 자동으로 정렬되고 첫 번째 키값이나 마지막 키값을 알 수 있기 때문에 단순 구현으로 문제를 풀 수 있다. 키값을 가져올 때 `TreeMap`이 비어있다면 `NoSuchElementException`이 발생하기 때문에 사이즈를 확인하는 부분만 신경 써주면 된다.
코드
import java.util.*;
class Solution {
public int[] solution(String[] operations) {
// 자동으로 정렬이 되는 TreeMap을 사용
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
for (String operation : operations) {
StringTokenizer st = new StringTokenizer(operation);
String token = st.nextToken();
int number = Integer.parseInt(st.nextToken());
if (token.equals("I")) {
treeMap.put(number, number);
} else {
if (treeMap.size() == 0) { // 트리에 들어있는게 없다면 넘어간다.
continue;
}
if (number == 1) {
treeMap.remove(treeMap.lastKey());
} else {
treeMap.remove(treeMap.firstKey());
}
}
}
if (treeMap.size() == 0) {
return new int[]{0, 0};
}
return new int[]{treeMap.lastKey(), treeMap.firstKey()};
}
}
TreeMap때문에 날로 먹은 문제 같음.
728x90