카테고리 없음

[백준_1205번] 등수 구하기

빙수빈수 2021. 8. 3. 18:56

https://www.acmicpc.net/problem/1205

 

1205번: 등수 구하기

첫째 줄에 N, 송유진의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000

www.acmicpc.net

[문제]

 유진이가 즐겨하는 디제이맥스 게임은 각각의 노래마다 랭킹 리스트가 있다. 이것은 매번 게임할 때 마다 얻는 점수가 비오름차순으로 저장되어 있는 것이다. 이 랭킹 리스트의 등수는 보통 위에서부터 몇 번째 있는 점수인지로 결정한다. 하지만, 같은 점수가 있을 때는 그러한 점수의 등수 중에 가장 작은 등수가 된다. 예를 들어 랭킹 리스트가 100, 90, 90, 80일 때 각각의 등수는 1, 2, 2, 4등이 된다

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

 

[입력 조건]

 첫째 줄에 N, 송유진의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보다 작거나 같은 자연수 또는 0이다. 둘째 줄에는 현재 랭킹 리스트에 있는 점수가 비오름차순으로 주어진다. 둘째 줄은 N이 0보다 큰 경우에만 주어진다.

 

[코드]

import java.util.*;

public class BaekJoon_1205 {
	public static int n,score,p;
	public static int[] arr;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		n=sc.nextInt();
		score=sc.nextInt();
		p=sc.nextInt();
		arr=new int[n];
		
		for(int i=0;i<n;i++)
			arr[i]=sc.nextInt();
		
		/*
		 * -1이 출력되는 경우는 랭킹 리스트가 다 차있는데
		 * 점수가 제일 낮은 사람보다 점수가 낮거나 같은 경우이다.
		 * 이러한 경우는 -1을 출력해주고 프로그램을 종료시킨다.
		 */
		if(n==p&&arr[n-1]>=score) {
			System.out.println(-1);
			System.exit(0);
		}
		
		// 이외의 경우라면 자신의 랭킹을 구한다.
		int rank=1;
		for(int i=0;i<n;i++) 
			if(arr[i]>score)
				rank++;
			else
				break;
	
		System.out.println(rank);
	}

}

 

[고찰]

 이번 문제는 랭킹 리스트에 저장되어 있는 값들이 내림차순으로 주어지기 때문에 -1이 출력되야하는 조건만 찾으면 쉽게 해결할 수 있는 문제였다. -1이 출력되야하는 경우는 랭킹 리스트가 모두 찼는데(n과 p가 같은 경우) 점수가 제일 낮은 사람보다 점수가 낮거나 같은 경우이다. 해당 경우가 아니라면 자신의 점수에 해당하는 랭킹을 for문을 사용하여 구하면 된다.