H-index

NJW·2022년 3월 31일
0

코테

목록 보기
27/170

들어가는 말

H-index를 구하는 문제다. 총 논문 n편 중, h번 이상 인용된 논문이 h편 이상 나머지 논문이 h번 이하면 h의 최댓값이라고 한다(https://programmers.co.kr/learn/courses/30/lessons/42747#).

처음에는 citations를 오름차순으로 정렬한 다음 while(1) 안에 for문을 citations의 size만큼 돌려서 만일 citations의 값이 h보다 크거나 같으면 citations의 사이즈에 i를 빼서 answer을 구해주는 방식으로 풀었다. 왜냐하면 오름차순으로 정렬이 되어 잇기 때문에 i의 뒷부분은 전부 h보다 크거나 같을 거기 때문이다. 그리하여 answer이 h와 같으면 break를 하는 거지.
하지만, 문제가 생겼으니 11번과 16번이 도저히 통과과 되지 않는 거다.

틀린 풀이

while(1){
        
        //count가 7, not_count가 1
        if(answer == h){
            break;
        }

        
        //0, 1, 2, 5, 5, 5, 5, 6
        for(int i=0; i<citations.size(); i++){
            if(citations[i] < h){
                continue;
            }else{
                answer = citations.size() - i;
                h++;
                break;
            }
        }
        
    }

코드 설명

그래서 다른 사람들의 풀이를 보니 sort를 내림차순으로 해서 i와 citations을 하나씩 비교하는 풀이가 있다는 걸 알아냈다. 인용이 6번 된 논문이 1편 이상, 인용이 5번 된 논문이 2편 이상, 인용이 3번 된 논문이 3편 이상. 그렇게 해서 citations의 값이 i+1보다 크거나 같다면 answer에 ++를 해주는 거다.

코드

#include <string>
#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.
    
    for(int i=0; i<citations.size(); i++){
        if(citations[i] >= i+1){
            answer++;
        }
    }
   
    return answer;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글