백준공부/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();
}
}