📝문제
https://www.acmicpc.net/problem/7662
이중 우선순위 큐 7662번
티어: 골드 4
💡풀이
문제 유형
자료 구조
트리를 사용한 집합과 맵
우선순위 큐
걸린 시간
60분
시간 복잡도
O(T×klogk)
풀이 방법 도출
- deque를 이용해서 시도했다가 시간초과 에러가 났고 우선순위 큐를 이용하려다 실패하고 결국 TreeMap이라는 자료구조를 사용하게 되었다.
- TreeMap이란 정렬된 맵으로 항상 키가 정렬된 상태로 유지되며, O(log N)의 시간 복잡도로 데이터를 삽입, 삭제, 조회할 수 있다. HashMap의 정렬된 버전이라고 생각하면 쉽다. (HashMap보다 삽입/삭제는 느리지만 정렬된 데이터를 다룰 때 훨씬 효율적이다.)
- firstKey(): 최솟값 찾기
- lastKey(): 최댓값 찾기
- pollFirstEntry(): 최솟값 삭제
- pollLastEntry(): 최댓값 삭제
- treeMap을 선언 후 key에는 n을, value에는 n의 개수를 넣어준다.
- D가 입력되면 -1일떄는 firstKey()를, 1일 때는 lastKey()를 사용해 key를 찾고
- 해당 key의 value값이 1이면 삭제해주고, 1이 아니라면 기존 value값에 -1을 해주고, 이를 반복한다.
- 이후 treeMap에 남은 key들 중 fistKey()와 lastKey()를 찾아주면 된다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i = 0; i < T; i++){
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
int k = Integer.parseInt(br.readLine());
for(int j = 0; j < k; j++){
StringTokenizer st = new StringTokenizer(br.readLine());
String command = st.nextToken();
int n = Integer.parseInt(st.nextToken());
if("I".equals(command)){
treeMap.put(n, treeMap.getOrDefault(n,0)+1);
}
if("D".equals(command)){
if(treeMap.isEmpty()) continue;
int key = 0;
if(n == 1){//최대값
key = treeMap.lastKey();
}
if(n == -1){//최솟값
key = treeMap.firstKey();
}
if(treeMap.get(key) == 1){
treeMap.remove(key);
}else{
treeMap.put(key, treeMap.get(key)-1);
}
}
}
if(treeMap.isEmpty()){
sb.append("EMPTY");
}else{
sb.append(treeMap.lastKey()).append(" ").append(treeMap.firstKey());
}
sb.append("\n");
}
System.out.println(sb);
}
}
🤔Review
TreeMap의 개념을 잘 몰랐는데 이 문제를 통해서 개념을 짚고 넘어간다. 🌳
'Algorithm' 카테고리의 다른 글
[Algorithm] 백준_DNA 비밀번호_12891번 (JAVA) 슬라이딩 윈도우 (0) | 2025.03.23 |
---|---|
[Algorithm] 백준_평범한 배낭_12865번 (JAVA) 🎒 (0) | 2025.03.23 |
[Algorithm] 백준_특정한 최단 경로_1504번 (JAVA) (1) | 2025.03.20 |
[Algorithm] 백준_수들의 합 5_2018번 (JAVA) (2) | 2025.03.18 |
[Algorithm] 백준_토마토_7569번 (JAVA) 🍅 (0) | 2025.03.18 |