백준 풀이/자바(Java)
백준 7662 자바 - 이중 우선순위 큐
콘스_
2024. 5. 24. 12:16
// 이중 우선순위 큐
package Gold_IV_4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Ex7662 {
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> map = 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 num = Integer.parseInt(st.nextToken());
if (command.equals("I")) {
map.put(num, map.getOrDefault(num, 0)+1);
} else if (command.equals("D")) {
if (!map.isEmpty()) {
int count = 0;
if (num == 1) {
count = map.lastKey();
} else if (num == -1) {
count = map.firstKey();
}
map.put(count, map.get(count) - 1);
if (map.get(count) == 0) {
map.remove(count);
}
}
}
}
if (map.isEmpty()) {
sb.append("EMPTY").append("\n");
} else {
sb.append(map.lastKey()).append(" ").append(map.firstKey()).append("\n");
}
}
System.out.print(sb);
}
}
이번 문제는 아래 블로그를 참고했다.
[BOJ] 백준 7662번 이중 우선순위 큐 (Java) (tistory.com)
[BOJ] 백준 7662번 이중 우선순위 큐 (Java)
#7662 이중 우선순위 큐 난이도 : 골드 4 유형 : 자료구조/ 우선순위 큐/ TreeMap 7662번: 이중 우선순위 큐 입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번
loosie.tistory.com
여러 방법을 시도하면서 나도 우선순위 큐 두개와 map을 사용하는 방법을 생각해 봤지만, 구현방식이 안 떠올랐다. treeMap을 사용하는 것도 생각해 봤지만, 최소 키와 최대 키만 찾는걸 보고 안 된다고 생각했다.
코드 설명
map.put(num, map.getOrDefault(num, 0)+1);
map의 key 값이 value라고 생각하면 편하다. 즉, map.put(value, 개수) 이런 것이다. num이 처음 들어오는 수면 1을 put하고, 원래 있던 수면 기존 개수에 +1을 해서 put한다.
// 내 코드
map.put(count, map.get(count) - 1);
if (map.get(count) == 0) {
map.remove(count);
}
// 블로그 코드
if(map.put(count, map.get(count)-1)==1) {
map.remove(count);
}
내가 참고한 블로그에서는 원래 저렇게 돼 있었는데, 난 map.put에 put 이전 값을 return 한다는 점이 생소해서 위처럼 풀었다.