codeground 연습문제 2

 이 문제는 주어진 입력 값을 받아 최종 우승할 가능성이 있는 응시자의 수를 구하는 문제이다.

*주의할 점은 공동 우승자가 존재할 수 있으나, 공동 우승자의 수를 구하는 것은 아니다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Arrays;
import java.util.Scanner;

class Solution {
    static int Answer, T, N, max, temp;
    static int[] player;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        T = sc.nextInt();
        for (int i = 0; i < T; i++) {
            max = 0;Answer = 0;N = sc.nextInt();
            player = new int[N];
            for (int  j = 0; j < N; j++) {
                player[j] = sc.nextInt();
            }
            Arrays.sort(player);
            for (int j = 0; j < N; j++) {
                temp = player[j] + (N - j); max = Math.max(max, temp);
            }
            for (int j = 0; j < N; j++) {
                Answer += (player[j] + N >= max) ? 1 : 0;
            }
            System.out.println("Case #"+(i+1));
            System.out.println(Answer);
        }
    }
}

sorting을 한 후 제일 작은 사람이 점수를 더 많이 받는 경우를 생각하고 그 중 최대 값을 구한다. 이 후 모든 player에 대하여 최대로 받을 수 있는 N을 더했을 때, max와 같거나 크다면 우승할 가능성이 있는 것으로 판단된다.

이 블로그의 인기 게시물

웹툰 무료로 볼 수 있는 사이트

BackJoon 1011, Fly me to the alpha centauri, 규칙 찾기 문제

BaekJoon 6591, 이항 쇼다운 조합문제