codeground 연습문제 2
이 문제는 주어진 입력 값을 받아 최종 우승할 가능성이 있는 응시자의 수를 구하는 문제이다.
*주의할 점은 공동 우승자가 존재할 수 있으나, 공동 우승자의 수를 구하는 것은 아니다.
sorting을 한 후 제일 작은 사람이 점수를 더 많이 받는 경우를 생각하고 그 중 최대 값을 구한다. 이 후 모든 player에 대하여 최대로 받을 수 있는 N을 더했을 때, max와 같거나 크다면 우승할 가능성이 있는 것으로 판단된다.
*주의할 점은 공동 우승자가 존재할 수 있으나, 공동 우승자의 수를 구하는 것은 아니다.
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와 같거나 크다면 우승할 가능성이 있는 것으로 판단된다.