새로운 점수가 랭킹에 들어갈 수 있는지를 확인하는 문제로
케이스는 크게 4가지가 있었다.
랭킹에 자리가 남았고(), 새로운 점수보다 작은 점수가 있는 경우
-> 랭킹에 같은 점수가 있다면 같은 점수의 가장 낮은 등수를 출력,
같은 점수가 없다면 작은 점수에 해당하는 등수를 출력
랭킹에 자리가 남았고(), 새로운 점수보다 크거나 같은 점수만 있는 경우
-> 랭킹에 같은 점수가 있다면 같은 점수의 가장 낮은 등수를 출력,
같은 점수가 없다면 "n+1"을 출력 (인덱스는 0에서 시작하므로)
랭킹에 자리가 꽉 찼고(), 새로운 점수보다 작은 점수가 있는 경우
-> 랭킹에 같은 점수가 있다면 같은 점수의 가장 낮은 등수를 출력,
같은 점수가 없다면 작은 점수에 해당하는 등수를 출력
랭킹에 자리가 꽉 찼고(), 새로운 점수보다 크거나 같은 점수만 있는 경우
-> 들어갈 자리가 없으므로 "-1" 출력
import java.util.*;
import java.io.*;
public class _1205 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 랭킹에 등록된 점수의 개수
int newScore = Integer.parseInt(st.nextToken()); // 새로운 점수
int p = Integer.parseInt(st.nextToken()); // 랭킹에 등록할 수 있는 점수의 수
ArrayList<Integer> scores = new ArrayList<>();
// 점수가 없는 경우
if(n==0){
System.out.println(1);
return;
}
st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++){
scores.add(Integer.parseInt(st.nextToken()));
}
// 내림차순 정렬
Collections.sort(scores, Collections.reverseOrder());
// System.out.println(scores);
// n<p인 경우
// n==p인 경우
// 새로운 점수보다 작은 점수가 있는 경우
// 새로운 점수보다 작은 점수가 없는 경우
// n<p인 경우
if(n<p){
// 새로운 점수보다 작은 점수가 있는 경우
for(int i=0; i<n; i++){
if(scores.get(i)<newScore){
// i-1번째에 같은 점수들이 있는 경우
while(i>=1 && scores.get(i-1)==newScore){
i--;
}
System.out.println(i+1);
return;
}
}
// 새로운 점수보다 작은 점수가 없는 경우
// 이전에 같은 점수가 있는지 확인
while(n>=1 && scores.get(n-1)==newScore){
n--;
}
System.out.println(n+1);
}
// n==p인 경우
else if(n==p){
// 새로운 점수보다 작은 점수가 있는 경우
for(int i=0; i<p; i++){
if(scores.get(i)<newScore){
// i-1번째에 같은 점수들이 있는 경우
while(i>=1 && scores.get(i-1)==newScore){
i--;
}
System.out.println(i+1);
return;
}
}
// 새로운 점수보다 작은 점수가 없는 경우
System.out.println(-1);
}
}
}