💡Problem Solving/Programmers

[프로그래머스] H-Index (Java)

gom20 2021. 10. 21. 00:37

#문제

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

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

 

#소스코드

import java.util.*;
class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        
        // stream 을 얻어서 Integer로 Wrap한 후, 내림차순으로 정렬한 후, int형으로 변환하여 Array로 리턴한다.
        citations = Arrays.stream(citations).boxed().sorted(Collections.reverseOrder()).mapToInt(x->x).toArray();
        boolean flag = true;
        for(int i = 0; i < citations.length; i++){
            int cnt = citations[i];
            // 인용 횟수가 논문의 개수보다 많으면 h-index가 되는 것이 불가능하다.
            if(cnt > citations.length) continue;
            // 현재 인덱스가 인용 횟수 이상일 경우, 인용횟수가 큰 순으로 정렬했기 때문에 
            // 해당 인용 횟수만큼 논문의 개수가 충족된다는 것을 의미한다.
            if(i >= cnt) {
                // 인덱스가 인용 횟수 이상이 됬을 때의 가장 처음 값을 취한다.
                answer = i;
                flag = false; // [9, 8, 7, 6, 5] 의 경우 마지막 인덱스를 따로 처리해줘야 한다. 
                break;
            }   
        }
        
        if(flag) answer = citations.length;        
        return answer;
    }
}