반응형
1. 이해하기
- 자료구조 트리를 사용하는 법을 물어보는 문제이다.
- java에서 TreeMap을 사용한다. HashMap은 정렬이 되지 않기 때문에 Key값으로 정렬이 되는 TreeMap을 사용한다.
- 이때, 값이 int값을 벗어날 수 있으므로 long을 key값으로 저장해준다.
2. 전체코드
package algo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.TreeMap;
public class Acm7662_이중우선순위큐 {
static TreeMap<Long, Long> map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int T = Integer.parseInt(st.nextToken());
for(int tc = 0; tc < T; tc++) {
map = new TreeMap<>();
st = new StringTokenizer(br.readLine()," ");
int K = Integer.parseInt(st.nextToken());
for(int k = 0; k < K; k++) {
st = new StringTokenizer(br.readLine()," ");
char cmd = st.nextToken().charAt(0);
long n = Long.parseLong(st.nextToken());
if(cmd == 'I') {
if(map.containsKey(n))
map.put(n, map.get(n)+1);
else
map.put(n, 1L);
} else if(cmd == 'D') {
if(map.isEmpty()) continue;
if(n == -1) {
long minKey = map.firstKey();
long next = map.get(minKey)-1;
if(next == 0)
map.remove(minKey);
else
map.put(minKey, next);
} else if(n == 1) {
long maxKey = map.lastKey();
long next = map.get(maxKey)-1;
if(next == 0)
map.remove(maxKey);
else
map.put(maxKey, next);
}
}
}
if(map.isEmpty())
System.out.println("EMPTY");
else {
System.out.println(map.lastKey()+" "+map.firstKey());
}
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 15459번 Haybale Feast (0) | 2020.04.09 |
---|---|
[백준] 16932번 모양만들기 (0) | 2020.03.22 |
[백준] 17471번 게리맨더링 (0) | 2020.02.13 |
[백준] 2660번 회장뽑기 (0) | 2020.02.13 |
[백준] 1248번 맞춰봐 (0) | 2020.02.13 |