본문 바로가기

알고리즘 문제풀이

프로그래머스 H-Index (JAVA)

  • 문제 : 프로그래머스 H-Index
 

코딩테스트 연습 - H-Index

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

programmers.co.kr

문제내용

image

풀이

N개의 논문 중 H-Index 최대값의 조건은 H회 인용된 논문의 개수가 최소 H개 이상이어야 한다. [10, 20, 30] 의 논문이 있다면 모두 10회 이상 인용되었지만 개수가 10개 이상이 아니므로 H-Index의 값은 3이되며 [3,3,4,4,4] 의 논문이 있다면 4회 이상 인용된 논문이 4개가 아닌 3개가 있으므로 H-Index의 값은 3이 된다. H-Index의 값을 쉽게 구하기 위해 내림차순 정렬을 한 뒤 Index = 0 으로 시작하여 Index 값의 위치에 논문의 인용 횟수가 Index + 1 이상임을 검사하며 조건에 만족한다면 Index++ 을 해주며 배열을 검사하면 된다.

 

정렬

Arrays.sort(arr, Collections.reverseOrder());

 

하지만 int[] 배열은 위와 같은 방법으로 정렬할 수 없고, Integer타입 배열로 변경해 주어야 한다.

Integer[] arr2 = Arrays.stream(arr).boxed().toArray(Integer[]::new);

전체코드

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        Integer[] arr = Arrays.stream(citations).boxed().toArray(Integer[]::new);
        Arrays.sort(arr, Collections.reverseOrder());

        int index = 0;
        for(int el : arr){
            // 6 5 3 1 0
            if(el < index + 1){
                answer = index;
                return answer;
            }
            index++;
        }
        answer = index;
        return answer;
    }
}