이 문제에서는 주어진 배열 크기 n와 랭킹 컷의 크기인 p가 같으면서, 랭킹 리스트의 가장 작은 순위보다 새로운 스코어가 작다면 랭킹에 들어갈 수 없다. 이것을 나타낸 코드는 아래와 같다.
if(n == p && new_score <= arr[arr.length-1]) { System.out.print(-1); }
나머지는 새로운 점수인 new_score가 랭킹리스트에서 몇등인지만 출력하면 되기때문에 간단해진다.
랭킹 리스트에 들지 못하는 경우를 우선적으로 처리하는 것이 핵심이다.
import java.util.*;
public class Main {
public static void main (String[]args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int new_score = scanner.nextInt();
int p = scanner.nextInt(); //랭킹 리스트에 오를 수 있는 갯수.
Integer[] arr = new Integer[n];
for(int i=0; i<n; i++){
arr[i] = scanner.nextInt();
}
Arrays.sort(arr, Collections.reverseOrder());
if(n == p && new_score <= arr[arr.length-1])
System.out.print(-1);
else{
int rank = 1;
for(int i=0; i<arr.length; i++){
if(new_score < arr[i])
rank++;
else
break;
}
System.out.print(rank);
}
}
}