// 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고,
// 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
일단 위 H-Index에 대해 잘 이해해야 했고, 어떤 방식으로 탐색하면 효율적인지 생각했다.
h번 이상 인용된 논문이 h편 이상 에 주목하여,
h를 어떻게 찾을까. h번 이상 인용된 논문 의 h 를 찾기보단 h편 이상 의 h 를 찾는 것에 중점을 두었다. 전자를 찾으려면 탐색 류의 알고리즘을 사용해야 될 것 같은데, 그러기엔 너무 까다롭게 접근하는 듯 했다. 후자를 찾으려면 인용 횟수가 많은 논문부터 탐색하면 쉽게 찾을 수 있을 것 같았다.
문제에서 주어지는 citations를 내림차순으로 정렬하여 인용 횟수가 많은 논문부터 탐색하기로 하였다.
인용 횟수가 많은 논문을 탐색하면서, answer를 하나씩 늘려간다. 그러다 answer보다 더 낮은 인용 횟수를 가진 논문이 나오면, 그 answer를 반환하면 된다.
코드
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> citations) {
int answer = 0;
sort(citations.rbegin(), citations.rend());
for(auto c : citations){
if(answer + 1 > c) break;
answer++;
}
return answer;
}