프로그래머스 42747 - H-Index

문제 링크

생각과 접근

// 어떤 과학자가 발표한 논문 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;
}

채점 결과

+ Recent posts