문제링크
https://www.acmicpc.net/problem/7662
package BOJ;
import java.io.*;
import java.util.*;
//7662 이중 우선순위 큐
public class Main_7662 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int t=0;t<T;t++) {
TreeMap<Integer,Integer> treeMap = new TreeMap<>();
int N = Integer.parseInt(br.readLine());
for(int i=0;i<N;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String str = st.nextToken();
int number = Integer.parseInt(st.nextToken());
// 지정된 키의 값을 반환하며 찾지 못하면 기본값(defaultValue)로 지정된 객체를 반환한다
if(str.equals("I")) treeMap.put(number,treeMap.getOrDefault(number,0)+1);
else{
if(!treeMap.isEmpty()){
int num = (number == 1) ? treeMap.lastKey():treeMap.firstKey();
if(treeMap.put(num,treeMap.get(num)-1) ==1) treeMap.remove(num);
}
}
}
System.out.println(treeMap.size() == 0 ?"EMPTY" : treeMap.lastKey()+" "+treeMap.firstKey());
}
}
}
제목이 이중우선순위 큐라서 PriorityQueue를 사용하여 해결하였었다.
내림차순으로 정렬하여 마지막 인덱스를 삭제할때는 reverseOrder라는 함수를 하나 만들어 큐에서 size>1이 될때까지 하나씩 빼면서 그 값을 새로운 큐에 넣어주는 방식을 사용했는데 그렇게 해결하니 시간초과가 발생했다!!
따라서 해결방법을 찾지못하고 인터넷에 검색해본 결과 TreeMap을 이용하는 방법이 있었다.
TreeMap은 일단 정렬된 상태로 입력이되며 firstKey,lastKey가 있어서 편하게 삭제를 할 수 있었다.
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA]백준_2606_바이러스 (0) | 2021.04.18 |
---|---|
[JAVA]백준_2458_키순서 (0) | 2021.04.18 |
[JAVA]백준_2531_회전초밥 (0) | 2021.04.16 |
[JAVA]백준_2470_두용액 (0) | 2021.04.15 |
[JAVA]백준_17836_ 공주님을구해라 (0) | 2021.04.14 |