백준공부/java

[백준] 4428번 Contest Scoreboard (silver 3

gomduri43 2023. 9. 17. 21:08

import java.io.*;
import java.util.*;
class Point{
    int t;
    int solve=0;
    int time=0;
    public Point(int t, int solve, int time){
        this.solve=solve;
        this.time=time;
        this.t=t;
    }
}
public class Main{

    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        HashMap<String,Integer> dict=new HashMap<>();
        ArrayList<Point> arr=new ArrayList<>();
        String input;
        while((input=br.readLine())!=null && !input.isEmpty()){
            StringTokenizer st=new StringTokenizer(input);
            String tN=st.nextToken();
            String problemN=st.nextToken();
            int useTime=Integer.valueOf(st.nextToken());
            char result=st.nextToken().charAt(0);

            if(dict.get(tN.concat("t"))==null){
                dict.put(tN.concat("t"), arr.size());
                arr.add(new Point(Integer.valueOf(tN),0,0));
            }
            String pt=problemN.concat(tN);
            if(result=='I'){
                if(dict.get(pt)==null){
                    dict.put(pt,20);
                }
                else if(dict.get(pt)>0){
                    dict.replace(pt, dict.get(pt)+20);
                }
            }
            else if(result=='C'){
                if(dict.get(pt)!=null && dict.get(pt)==-1){
                    continue;
                }
                int temp=0;
                arr.get(dict.get(tN.concat("t"))).solve++;
                arr.get(dict.get(tN.concat("t"))).time+= temp = dict.get(pt)==null ? useTime : dict.get(pt)+useTime;
                dict.put(pt,-1);
            }
        }
        Collections.sort(arr, new Comparator<Point>(){
           public int compare(Point o1, Point o2){
               if(o1.solve==o2.solve){
                   if(o1.time==o2.time){
                       return -(o1.t-o2.t);
                   }
                   else{
                       return -(o1.time-o2.time);
                   }
               }
               else{
                   return o1.solve-o2.solve;
               }
           }
        });

        for(int i=arr.size()-1; i>=0; i--){
            Point answer=arr.get(i);
            bw.write(answer.t+" "+answer.solve+" "+answer.time+"\n");
        }
        bw.flush();
    }
}