programmers 문제 H-Index 구하기
H-Index란?
어느 과학자의 h개 논문이 h번 이상 인용되고 나머지 논문들은 h번 미만 인용되었다면, 그 과학자의 h-index는 h일까?
참고) 어떤 연구자의 논문들 중 h개 논문이 최소 h회 이상씩 인용되면 H-index는 h이다.
그래프로 나타내면
이러한 그래프가 그려진다 x축(citations)이 논문수가 되고, y축이 인용수(papers)가 된다.
피인용수가 논문수보다 같거나 작아지기 직전하는 숫자 즉 피 인용수 >= 논문 수가 H-index가 된다.
이 H-Index를 구하는 공식은 자바로 하면
풀이
public static int solution(int[] arr) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
list.add(arr[i]);
} // Collections 메서드를 이용하기 위해 ArrayList에 담는다.
Collections.sort(list); // 논문수와 인용수를 비교하기 쉽게 정렬한 다음
Collections.reverse(list); // 그래프의 형태를 이용하여 값을 구하기 위해 배열을 뒤집는다.
for (int i = 0; i < list.size(); i++) {
if (list.get(i) < i+1) { // 논문수는 1부터 시작하니 i(0) + 1부터 비교한다.
return i; // 인용수가 논문수보다 작아지는 시점에 논문의 인덱스 번호(H-Index)를 리턴함
}
}
return list.size(); // H-index의 그래프가 그려지지 않는 값은 논문수 = H-index 이다.
}