오늘의 알고리즘

[C++]정렬 H-Index(프로그래머스 2레벨)

하늘하늘 . 2022. 3. 31. 16:37
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
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
// 1. 보다 큰 수는 배열 수
 
int solution(vector<int> citations)
{
    sort(citations.begin(), citations.end(), greater<int>());
 
    // 1. 숫자보다 큰 숫자가 있어야한다.
    // 2. 숫자보다 작은 숫자가 나머지여야함.
    int iSize = citations.size();
 
    for (int i = iSize; i >= 0--i)
    {
        int iCount = 0;
 
        for (int j = 0; j < i; ++j)
        {
            if (citations[j] >= i)
                ++iCount;
 
            if (iCount >= i)
            {
                if (iSize - j <= i)
                    return i;
            }
        }
 
        iCount = 0;
    }
 
    return 0;
}
 
cs

처음에는 간단하게 생각하고 간단하게 풀려고 했는데 안되더라

그래서 이렇게 해놓고 보니까

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int solution(vector<int> citations) {
    sort(citations.begin(), citations.end(), greater<int>());
 
    for (int i = 0; i < citations.size(); ++i) {
        if (citations[i] < i + 1) {
            return i;
        }
    }
 
    return citations.size();
}
cs

내 생각을 그대로 풀이로 썼는데 왜 난 안됬을까 흠...

물론 이진탐색도 가능하다.