백준

[백준_1205번] 등수 구하기

빙수빈수 2023. 3. 26. 17:47

[문제]

 태수가 즐겨하는 디제이맥스 게임은 각각의 노래마다 랭킹 리스트가 있다. 이것은 매번 게임할 때 마다 얻는 점수가 비오름차순으로 저장되어 있는 것이다.

이 랭킹 리스트의 등수는 보통 위에서부터 몇 번째 있는 점수인지로 결정한다. 하지만, 같은 점수가 있을 때는 그러한 점수의 등수 중에 가장 작은 등수가 된다.

 예를 들어 랭킹 리스트가 100, 90, 90, 80일 때 각각의 등수는 1, 2, 2, 4등이 된다

랭킹 리스트에 올라 갈 수 있는 점수의 개수 P가 주어진다. 그리고 리스트에 있는 점수 N개가 비오름차순으로 주어지고, 태수의 새로운 점수가 주어진다. 이때, 태수의 새로운 점수가 랭킹 리스트에서 몇 등 하는지 구하는 프로그램을 작성하시오. 만약 점수가 랭킹 리스트에 올라갈 수 없을 정도로 낮다면 -1을 출력한다.

만약, 랭킹 리스트가 꽉 차있을 때, 새 점수가 이전 점수보다 더 좋을 때만 점수가 바뀐다.

 

[코드]

import java.util.*;

public class BaekJoon_1205 {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		
		int n=sc.nextInt();
		int teasu=sc.nextInt();
		int p=sc.nextInt();
		
		Integer[] score=new Integer[n];
		for(int i=0;i<n;i++)
			score[i]=sc.nextInt();
		
		// 내림차순 정렬
		Arrays.sort(score, Collections.reverseOrder()); 
		
		// 랭킹에 들지 못하는 경우
		if(n>=p&&score[n-1]>=teasu)
			System.out.println(-1);
		else {
			int rank=1;
			for(int i=0;i<n;i++) { 
				// 태수의 점수보다 점수가 높은 경우에만 랭크 증가
				if(teasu<score[i])
					rank++;
				// 태수와 점수가 같거나 낮은 경우에는 랭크 증가 종료
				else
					break;
			}
			System.out.println(rank);
		}
	}
}

 

[고찰]

 이번 문제는 내림차순 정렬 후 태수의 점수보다 점수가 높은 경우에만 랭크를 증가하면서 태수의 랭크를 구하면 되는 문제였다. 단, 그 전에 랭킹에 들지 못하는 경우를 먼저 처리해주어야 했다. 이 부분만 체크한다면 쉽게 해결할 수 있는 문제였다.