티스토리 뷰

문제 링크

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

 

 

 

풀이

문제 이해하기 힘들면 위키백과 보기를 추천합니다.(제가 그럼...)

 

생각해보면, h-index를 한정 짓는 것은 논문을 편찬한 개수이다.

따라서 인용된 횟수랑 비교하면서 논문을 편찬한 개수를 줄여나가면서 h-index의 최대를 구할 수 있다.

 

따라서 코드를 요약하자면,

 

citations을 오름차순으로 정렬하여 원소값과 비교하면서 순회한다.(인용된 횟수랑 비교하기 위해서)

i 번째 원소(논문 인용횟수) 이상인 원소(논문) 갯수는 citations.size()-i 개이므로 answer에 미리 할당한다.(반복문의 3번 이유로)

 

반복문 순회하면서

{

    1. i 번째 원소값과 answer가 일치할 경우 break;

    2. i 번째 원소값이 answer(i번째 원소 이상인 원소 갯수)보다 클 경우 break;

    3. 둘다 아닐 경우 answer--; (citations.size()-i)와 같다.

}

 

 

 

더보기
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

// 과학자가 발표한 논문 n편 중 h번 이상 인용된 논문이 h편이상, 나머지 논문 h번 이하 인용될 경우
// h의 최댓값은 H-Index이다.

int solution(vector<int> citations) {
    int answer = citations.size();
    sort(citations.begin(), citations.end());
    for(int i=0; i<citations.size(); i++){
        if(citations[i] >= answer) break;
        answer--;
    }
    return answer;
}
728x90
반응형
댓글
05-13 18:59
링크