[프로그래머스] H-Index

jh Seo·2023년 7월 12일
0

프로그래머스

목록 보기
19/32

개요

프로그래머스 H-INDEX

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

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

    어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

접근 방식

  1. 일단 이해부터 어려웠던 문제다. 한줄 한줄 다시 보니 감이 왔다.

  2. h번 이상 인용된 논문이 h편 이상이여야 한다,
    나머지 논문이 h번 이하 인용되어야 한다.
    -> 주어진 배열을 정렬한 후, 인덱스를 통해 h편이상인지 판별한다고 아이디어를 얻었다.

  3. 구현한 방식은 내림차순으로 정렬한 후,
    제일 끝 인덱스부터 0번째 인덱스까지 순회하며 현재 인덱스의 값이
    조건을 만족하는지 알아보는 방식이였다.

       sort(citations.begin(),citations.end(),greater<int>());
       for(int i=citations.size()-1;i>=0;i--){
           //i번째 논문의 인용수는 i+1값보다 커야한다.
           if(citations[i]<i+1) continue;
           answer=i+1;
           break;
       }

    i+1과 비교하는 이유는 자기자신도 조건에 포함되서다.

전체 코드

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

using namespace std;

int solution(vector<int> citations) {
    int answer = 0;
    sort(citations.begin(),citations.end(),greater<int>());
    for(int i=citations.size()-1;i>=0;i--){
        //
        if(citations[i]<i+1) continue;
        answer=i+1;
        break;
    }
    return answer;
}

접근방식

문제에 h가 너무많아서 당황한 문제였다.
h이상에 자기자신도 포함되어서 +1한 값과 비교해야한다.

profile
코딩 창고!

0개의 댓글