반응형
    
    
    
  문제 출처 :
https://www.acmicpc.net/problem/2790
알고리즘 분석 :
문제 해결에 필요한 사항
1. 문제의 함정 발견 능력
2. 내림차순 정렬
예시 입력 코드에 다음과 같이 되어있다.
3
8
10
9
이 코드를 내림차순 전렬하면 10 9 8이고 결국 10은 우승 할 수 있고, 9도 마지막 경기에서 이기면 12점으로 우승할 수 있고
8 또한 마지막 경기서 우승 시 11 11 11점으로 서로 공동우승 할 수 있다.
결국 이 문제를 보면 느끼게 되는 것이 예제 입력에 홀려 현재 가리키는 점수가 최고점을 받고 이전 최고점을 받은 점수가 최저점(1점)을 받으면 무조건 우승한다라고 판단하게 된다.
예를들어
8 10 9에서 8이 3점 10이 1점받으면 된다고 판단하게 될 수 있다.
하지만 1 3 3 3 을 보자.
3 3 3 1로 정렬 된 후, 1이 1등을 하여 5가 된다 보면 과연 우승 할 까?
4 5 6 5로 우승을 하지 못하게 된다.
그림을 통해 소스 코드를 확인 해 보자.
소스 코드 :
| 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 | #include <iostream> #include <algorithm> using namespace std; int a[300001]; bool cmp(const int &x,const int &y)  {     return x > y;  } int main() {     int n; // 레이싱 선수 인원     int ans = 0; //우승 가능성이 있는 선수 인원     int need = 0; //필요한 점수     cin >> n;     for (int i = 0; i < n; i++)         cin >> a[i];     sort(a, a + n, cmp); // 내림차순 정렬     for (int i = 0; i < n; i++)      {         // 현재 해당하는 배열 값 + 최댓값이 필요점수 이상이 되면 +1          ans += (a[i] + n >= need);          // 필요점수의 최댓값을 구하는 식         need = max(need, a[i] + i + 1);      }     cout << ans;     return 0; } //                                                       This source code Copyright belongs to Crocus //                                                        If you want to see more? click here >> | Crocus | 
반응형
    
    
    
  'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
| [1212번] 8진수 2진수 (2) | 2016.10.28 | 
|---|---|
| [2605번] 줄 세우기 (0) | 2016.10.28 | 
| [2875번] 대회 or 인턴 (0) | 2016.10.24 | 
| [2193번] 이친수 (0) | 2016.10.14 | 
| [2910번] 빈도 정렬 (0) | 2016.10.09 |