TreeSet을 활용하는 문제였다.
TreeSet을 compareTo를 이용해서 정렬하는 방법과, 새롭게 값을 add하는 방법, 맨 앞의 값과, 맨 뒤의 값을 출력하는 방법, 삭제하는 방법을 적용하여 풀어볼수 있었다.
import java.util.*;
public class Main {
public static class Problem implements Comparable<Problem> {
int idx;
int level;
public Problem(int idx, int level) {
this.idx = idx;
this.level = level;
}
//난이도 순으로 정렬 -> 문제 번호로 정렬
public int compareTo(Problem o) {
if (level - o.level == 0) {
return idx - o.idx;
} else {
return level - o.level;
}
}
public String toString(){
return "idx : "+idx+" level : "+level;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
TreeSet<Problem> ts = new TreeSet<>();
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
int nowidx = sc.nextInt();
int nowlevel = sc.nextInt();
ts.add(new Problem(nowidx, nowlevel));
map.put(nowidx,nowlevel);
}
// System.out.println(ts.toString());
int m = sc.nextInt();
for (int i = 0; i < m; i++) {
String command = sc.next( );
if (command.equals("add")) {
int nowidx = sc.nextInt();
int nowlevel = sc.nextInt();
ts.add(new Problem(nowidx, nowlevel));
map.put(nowidx,nowlevel);
} else {
if (command.equals("recommend")) {
if (sc.nextInt() == 1) {
System.out.println(ts.last().idx);
} else {
System.out.println(ts.first().idx);
}
} else {
int nowidx = sc.nextInt();
ts.remove(new Problem(nowidx,map.get(nowidx)));
map.remove(nowidx);
}
}
}
}
}