알고리즘/프로그래머스

Programers H-Index

내이름은 킹햄찌 2022. 3. 12. 21:18

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

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

프로그래머스 H-Index 문제입니다.

 

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

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

 

아이디어

이 문제는 문제 이해를 완전히 하는게 풀이의 95퍼센트라해도 과언이 아닐정도로 이해하기가 어려웠음

실제로 H-Index라는 것이 존재 했고, return citations.size() - i; 라인을 이해하는데 정말 많은 시간을 사용함

아마 프로그래머스에서 제공된 테스트 케이스 [3, 0, 6, 1, 5] result = 3이 원인이 아닐까 생각 됨

제공 된 테스트 케이스의 3과 결과 값 3을 보고 테스트 케이스에 있는 값이 반환이 되어야 한다는 생각이 강하게 박히면서 작성한 코드의 모든것을 의심하고 심지어는 피곤해서 if문의 비교연산자를 착각하고 있는게 아닐까 라는 생각까지 함

 

이해를 도울수 있는 테스트 케이스 몇가지 공유합니다.

[3]  -> result = 1

[3, 5, 7] -> result = 3 // 3번이상 인용된 논문이 3편임

[0, 0, 0, 2, 3, 3, 3] -> result = 3 // 3번 이상 인용된 논문이 3편임