백준공부/java

[백준] 1205번 등수 구하기 (silver 4

gomduri43 2024. 3. 20. 18:10

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

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<Integer ,Integer> dict=new HashMap<>();
        StringTokenizer st=new StringTokenizer(br.readLine());
        int n=Integer.valueOf(st.nextToken());
        int m=Integer.valueOf(st.nextToken());
        int p=Integer.valueOf(st.nextToken());
        //n이 0이면 더이상 입력x
        if(n>0) {
            st = new StringTokenizer(br.readLine());
        }
        //앞에 수들이 중복되는 만큼 갯수 업데이트
        ArrayList<Integer> arr=new ArrayList<>();
        for(int i=0; i<n; i++){
            int temp=Integer.valueOf(st.nextToken());
            if(dict.get(temp)==null){
                dict.put(temp,1);
                arr.add(temp);
            }
            else{
                dict.put(temp, dict.get(temp)+1);
            }
        }
        //새로운 점수를 넣고, 내림차순으로 정렬
        int answer=0;
        arr.add(m);
        Collections.sort(arr, Collections.reverseOrder());


        //앞의 큰수 들이 갯수 만큼 등수가 밀리므로 answer에 더하기.
        //이때 마지막에 m점수일때, 새로운 점수를 제외한, 중복점수가 있을경우에
        //만약 그 갯수를 더한 값이 p를 넘어가면 이미 랭크리스트는 꽉찬 경우.
        //이때 새로운 점수를 들어오지 않으므로 랭킹에 들 수 없어서 p+10으로 랭킹에서 벗어나게
        for(int i=0; i<arr.size(); i++){
            if(arr.get(i)==m){
                answer+=1;
                if(dict.get(m)!=null && answer-1+dict.get(m)>=p){
                    answer=p+10;
                }
                break;
            }
            else{
                answer+=dict.get(arr.get(i));
            }
        }


        bw.write( answer<=p ? answer+"" : "-1");
        bw.flush();

    }

}