[BOJ]21939 - 문제 추천 시스템 Version 1 (G4)

suhyun·2022년 12월 23일
0

백준/프로그래머스

목록 보기
50/81

문제 링크

21939-문제 추천 시스템 Version 1


입력

첫 번째 줄에 추천 문제 리스트에 있는 문제의 개수 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);
            }
        }
    }
}

어렵지 않았다.
근데 정말 왜 런타임에러가 저만큼 났는지 모르겠다..
또 나만 모르는 오류가 있는거였겠지만
정말로 맞은 코드랑 차이점을 모르겠지만 어떻게든 해내긴 했다..
지독하다 정말로

profile
꾸준히 하려고 노력하는 편 💻

0개의 댓글