문제 난이도

level 2

문제 설명

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 과학자가 발표한 논문의 수는 1평 이상 1,000편 이하입니다.
  • 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.

문제 풀이

이 문제는 먼저 이해하는 것이 많이 힘들었다. 우선 citiations를 sort 함수를 이용하여 내림차순으로 정렬을 해준다. 그리고 반복문 내에서 answer를 0번째 인덱스의 인용된 수와 비교를 해가며 1씩 늘린다. 해당 인덱스의 인용뒨 수가 answer보다 작거나 answer가 citations의 size를 넘어가면 멈추도록 해주고 그때의 answer값이 H-Index가 된다.

풀이 코드

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

using namespace std;

int solution(vector<int> citations) {
    int answer = 0;
    
    sort(citations.rbegin(), citations.rend());
    while(1){
        if(citations[answer]<=answer || answer>citations.size()) break;
        ++answer;
    }
    
    return answer;
}



문제 출처

프로그래머스 H-Index