반응형

문제 출처 :


https://www.codeground.org/practice/practiceProblemList



알고리즘 분석 :


문제 해결에 필요한 사항

1. 정렬


문제 이해를 위해 최고점이 어떻게 성립되는지 알아봐야 한다.


각 사람의 최종 라운드 이전까지의 점수가 주어지면 그 점수에 n을 더하면 최고점이 된다.


그렇다면 이를 해결하기위해 최종 라운드 이전까지에서 

마지막 라운드때 최고 득점 할 수 있는 최댓값을 구하기 위해 다음과 같은 작업을 한다.


정렬 후 n등부터 1등에게 각각 n-i점부터 1점까지 부여 -> 마지막 라운드에서 최고 득점 할 수 있는 최댓값


이 최댓값을 이용하여 문제를 해결한다.


소스 코드 : 


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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <cstdio>
#include <algorithm>
 
#define max(a,b)(a > b ? a : b)
 
using namespace std;
 
int arr[300002];
 
int main()
{
    int tc;
    scanf("%d"&tc);
 
    for (int tCase = 1; tCase <= tc; tCase++)
    {
        int n;
        int get = 0;
 
        scanf("%d"&n);
        for (int i = 0; i < n; i++)
            scanf("%d"&arr[i]);
 
        sort(arr, arr + n);
 
        // 정렬 후 n등부터 1등에게 각각 n-i점부터 1점까지 부여한 후
        // 마지막 라운드에서 최고 득점 할 수 있는 최댓값
        for (int i = 0; i < n; i++)
            get = max(get, arr[i] + n - i);
 
        int cnt = 0;
 
        // 현재 사람에 n점을 더할 때(최고점) get이상이면 cnt++
        for (int i = 0; i < n; i++)
            if (arr[i] + n >= get)
                cnt++;
 
        printf("Case #%d\n%d\n", tCase, cnt);
    }
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[Codeground 4번] 다트 게임  (0) 2017.05.10
[Codeground 3번] 시험 공부  (0) 2017.05.09
[3006번] 터보소트  (0) 2017.05.06
[10986번] 나머지 합  (0) 2017.05.04
[1051번] 숫자 정사각형  (0) 2017.05.04