[백준](Java) 21939 - 문제 추천 시스템 Version 1

민지킴·2021년 6월 29일
0

백준

목록 보기
36/48
post-thumbnail

문제 링크

https://www.acmicpc.net/problem/21939

문제 풀이

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);
                }
            }
        }
    }
}

profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글