본문 바로가기
알고리즘 문제 풀이/프로그래머스

프로그래머스 H-Index c++ (정렬)

by 옹구스투스 2021. 5. 13.
반응형

문제 출처 : 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를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.

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

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

제한사항

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

입출력 예

입출력 예 설명

이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.

※ 공지 - 2019년 2월 28일 테스트 케이스가 추가되었습니다.

 

풀이

이해하기 어려웠던 문제이다.

예를들어 citations가 4,0,6,1,5이고 이를 정렬해서 

citations = {0, 1, 4, 5, 6}이 있다고 하자.

h번 이상 인용된 논문이 h편 이상이고, 나머지 논문이 h번 이하 인용 되었다면 h의 최댓값을 구하라.

citations에 저장된 값들은 논문들의 인용 횟수를 나타내기 때문에,

h가 6이 넘는 경우는 없으니 h는 대략적으로 0~6이고(범위를 더 줄일 수 있긴 하나, 작성한 코드 중심의 풀이이다),

h가 0일 때 0번 이상 인용된 논문은 5개로 0편 이상이고 나머지 논문은 없다.

h가 1일 때 1번 이상 인용된 논문은 4개로 1편 이상이고 나머지 논문은 0 하나이다.

h가 2일 때 2번 이상 인용된 논문은 3개로 2편 이상이고 나머지 논문은 0, 1 둘이다.

h가 3일 때 3번 이상 인용된 논문은 3개로 3편 이상이고 나머지 논문은 0, 1 둘이다.

h가 4일 때 4번 이상 인용된 논문은 3개로 4편 이하이니 조건에 맞지 않는다.

h가 5일 때 5번 이상 인용된 논문은 2개로 5편 이하이니 조건에 맞지 않는다.

h가 6일 때 6번 이상 인용된 논문은 1개로 6편 이하이니 조건에 맞지 않는다.

이 중 조건에 맞는 h의 최댓값은 3이다.

 

 

 

 

코드

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

using namespace std;

int solution(vector<int> citations) {
    int answer = 0;
    sort(citations.begin(),citations.end());
   for(int i=0; i<=citations[citations.size()-1];i++){
      int start=0;
       for(;start<citations.size();start++){
           if(citations[start]>=i)
               break;
       }
     cout << i <<' '<< start << ' '<< citations.size()-start<<'\n';
       if(citations.size()-start>=i){
           answer = i;
           //break;
       }
   }
    return answer;
}
반응형

댓글