(프로그래머) C++ H-인덱스

이게 2급인가요..?

이해하면 5분 안에 풀 수 있는 문제입니다. 다만 설명이 어렵기 때문에 코딩하는 시간보다 이해하는 시간이 더 길다.

h번 이상 인용된 논문은 h개 이상의 논문이 있어야 하기 때문에 혼란스럽습니다.

에세이를 인용횟수 순으로 정렬한 후 에세이가 정렬된 벡터의 index를 하나씩 증가시키고, h보다 많이 인용된 에세이의 개수(답변)도 ++로 부여한다. 이때 vector(index)의 값이 답보다 작으면 그냥 답을 돌려주면 된다.

예를 들어

정렬 1, 5, 7, 20, 8, 3, 4

20, 8, 7, 5, 4, 3, 1.

답이 20이면 답이 작기 때문에 ++를 준다. 답변 = 0

8이면 답이 작으니 ++를 입력합니다. 답변 = 1

7 답이 적으면 ++를 준다. 답변 = 2

5 답이 적으면 ++를 준다. 답변 = 3

4이면 답이 작으니 ++를 입력합니다. 답변 = 4

답이 4이면 답이 더 크므로 답이 주어진다.

의 순서로 실행됩니다.


#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> citations) {
    int answer = 0;
    
    sort(citations.begin(), citations.end(), greater<int>());
    
    if (!citations(0))
        return 0;
    
    for (int i = 0; i < citations.size(); i++)
    {
        if (citations(i) > i)
            answer++;
        else
            break;
    }
    
    return answer;
}