[Java] 백준 1205 등수 구하기

hyunnzl·2024년 11월 22일

백준

목록 보기
1/116
post-thumbnail

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

난이도

실버4

문제

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

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

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

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

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

입력

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

내 코드

import java.util.*;
import java.io.*;

class Main {
    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());
        Long T = Long.parseLong(st.nextToken());
        int P = Integer.parseInt(st.nextToken());
        int front = 0, rank = 0;

        if(N != 0){ 
            st = new StringTokenizer(br.readLine());
            for(int i = 0; i < N; i++){
                Long tmp = Long.parseLong(st.nextToken());
                if(tmp >= T){
                    front++;
                }if(tmp > T){
                    rank++;
                }
            }
        }
        if(N == 0){
            System.out.println(1);   
        }else{
            System.out.println(front >= P ? -1 : rank + 1);   
        }
    }
}

앞에 있는 사람과 동점인 사람을 구분해서 카운트 하는 방법을 떠올렸다.

동점인 경우가 헷갈렸었는데

10 1 10
10 9 8 7 6 5 4 3 2 1

이 입력의 경우 출력이 -1이다.
이 테스트케이스로 보면 동점인 사람이 있다면 태수는 11위가 되기 때문에 순위권에 들지 못해 -1이 올바른 출력이다.

태수보다 확실히 높은 점수를 얻은 사람은 앞에 있는 사람이므로 rank를 + 해주고,
동점의 경우에는 그 중 가장 아래 등수가 되기 때문에 동점인 사람까지 카운트 하기 위해 front를 + 해주었다.

모든 사람을 확인한 후, 출력의 경우 순위권의 범위인 P 이상인 경우 -1이 출력되고, 아닌 경우 rank에 1을 더한 값을 출력으로 했다.

0개의 댓글