첫 번째 줄에 추천 문제 리스트에 있는 문제의 개수 N이 주어진다.
두 번째 줄부터 N+1 줄까지 문제 번호 P와 난이도 L가 공백으로 구분되어 주어진다.
N+2 줄은 입력될 명령문의 개수 M이 주어진다.
그 다음줄부터 M개의 위에서 설명한 명령문이 입력된다.
recommend 명령이 주어질 때마다 문제 번호를 한 줄씩 출력한다.
최소 한번의 recommend 명령어가 들어온다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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 static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
TreeSet<Problem> pq = new TreeSet<>();
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int idx = Integer.parseInt(st.nextToken());
int level = Integer.parseInt(st.nextToken());
pq.add(new Problem(idx, level));
map.put(idx, level);
}
st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
String cmd = st.nextToken();
if (cmd.equals("add")) {
int p = Integer.parseInt(st.nextToken());
int l = Integer.parseInt(st.nextToken());
pq.add(new Problem(p, l));
map.put(p, l);
}
if (cmd.equals("recommend")) {
int x = Integer.parseInt(st.nextToken());
if (x == 1) {
System.out.println(pq.last().idx);
} else if (x == -1) {
System.out.println(pq.first().idx);
}
}
if (cmd.equals("solved")) {
int p = Integer.parseInt(st.nextToken());
pq.remove(new Problem(p, map.get(p)));
map.remove(p);
}
}
}
}
어렵지 않았다.
근데 정말 왜 런타임에러가 저만큼 났는지 모르겠다..
또 나만 모르는 오류가 있는거였겠지만
정말로 맞은 코드랑 차이점을 모르겠지만 어떻게든 해내긴 했다..
지독하다 정말로