21939문제 추천 시스템 Version 1

LJM·2023년 1월 9일
0

백준풀기

목록 보기
23/259

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

해시맵
트리맵, 트리셋 3개를 써서 해결하였다. 잘 푼건지 싶다;;

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        HashMap<Integer, Integer> pmap = new HashMap<>();//Problem, Level
        TreeMap<Integer, TreeSet<Integer>> lmap = new TreeMap<>();//Level, Problem //내림차순// Level은 여러개의 Problem 을 가질 수 있다

        String[] input;
        int P,L;
        for(int i = 0; i < N; ++i)
        {
            input = br.readLine().split(" ");
            P = Integer.parseInt(input[0]);
            L = Integer.parseInt(input[1]);

            putTopmaplmap(pmap, lmap, P, L);
        }

        StringBuilder sb = new StringBuilder();

        int M = Integer.parseInt(br.readLine());
        for(int i = 0; i < M; ++i)
        {
            input = br.readLine().split(" ");

            if(input[0].equals("add"))
            {
                P = Integer.parseInt(input[1]);
                L = Integer.parseInt(input[2]);
                putTopmaplmap(pmap, lmap, P, L);
            }
            else if(input[0].equals("recommend"))
            {
                if(input[1].equals("-1"))
                {
                    sb.append(lmap.get(lmap.firstKey()).first() + "\n");
                }
                else if(input[1].equals("1"))
                {
                    sb.append(lmap.get(lmap.lastKey()).last() + "\n");
                }
            }
            else if(input[0].equals("solved"))
            {
                int Problem = Integer.parseInt(input[1]);
                int Level = pmap.remove(Problem);
                TreeSet<Integer> tree = lmap.get(Level);
                tree.remove(tree.floor(Problem));
                if(tree.isEmpty())
                {
                    lmap.remove(Level);
                }
            }
        }

        System.out.println(sb.toString());
    }

    private static void putTopmaplmap(HashMap<Integer, Integer> pmap,
                                      TreeMap<Integer, TreeSet<Integer>> lmap,
                                      int P,
                                      int L)
    {
        pmap.put(P, L);

        if(lmap.containsKey(L))
        {
            lmap.get(L).add(P);
        }
        else
        {
            TreeSet<Integer> tree = new TreeSet<>();
            tree.add(P);
            lmap.put(L, tree);
        }
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글