[ C++ ] 프로그래머스 Level 2: H-Index
✏️ PS/Programmers

[ C++ ] 프로그래머스 Level 2: H-Index

반응형

안녕하세요? 수구리입니다.

이번 포스팅은 H-Index에 대한 문제입니다.

아래에 문제 링크입니다.

 

[ 문제 ] 코딩테스트 연습 Level 2: H-Index

https://programmers.co.kr/learn/courses/30/lessons/42747

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

 

 

 

H-Index란 ?

H-Index는 과학자의 생산성과 영향력을 나타내는 지표이다.

어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 한다.

H-Index 계산방법

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고
나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

 

예제

  • citations : 한 과학자가 발표한 논문의 인용 횟수에 대한 배열
citations  return
[3, 0, 6, 1, 5] 3
  • 한 과학자가 총 5편의 논문을 발표
  • 5개의 논문 중 3편의 논문 (3, 6, 5)는 3회 이상 인용
  • 나머지 2편의 논문은 3회 이하 인용

따라서 이 과학자의 H-Index는 3이 됩니다.

 

[ 풀이 ]

#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> citations) {
    int answer = 0; 

    // 내림차순 정렬
    sort(citations.begin(), citations.end(), greater<int>()); // [6, 5, 3, 1, 0]
    // 인용수가 0이면 H-index는 0
    if (!citations[0]) return 0; 
    
    for(int i = 1; i <= citations.size(); i++) {
        if ( citations[i-1] >= i ) {
            answer++;
        } else {
            break;
        }
    }
    
    return answer;
}

 

[ 설명 ]

1. 우선 입력값인 배열 citations를 내림차순 정렬한다.

2. 내림차순으로 정렬을 했는데 citations[0] 값이 0이면 H-Index는 0이다.

3. 지역변수 i가 1부터 시작하지만, 배열의 모든 요소를 순회하기 위해서 size만큼 반복하며, 조건문에서 citations[ i - 1 ] 을 통해서 citations[0] 부터 citations[end] 까지 순회할 수 있다.

4. 만약 인용된 횟수가 순회하는 index값인 i보다 크거나 같다면 answer를 하나 증가시킨다.

5. 순회하다가 i가 citations 배열의 요소보다 커지는 순간 반복을 빠져나와 그때의 answer값은 H-Index이다.

 

[ 결과 ]

반응형