해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다

H-Index가 무엇인지 이해하는 것이 중요해 보입니다. 그 외에는 어렵지 않을 것 같습니다
이전에 코딩테스트 문제풀이 때 풀어본 경험이 어렴풋이 나서 이해하는데는 어렵지 않았습니다. 다만 잘못 이해하고 있었던 부분이 H-index가 딱 맞아 떨어지지 않을 때 이전 값을 선택해야할 지 그 순간을 선택해야할지 잘 몰랐었습니다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
//[0, 1, 3, 5, 6]
Arrays.sort(citations); //순서는 상관 없음
int answer = 0;
for(int i=0;i<citations.length;i++){
int h = citations.length - i; //h편 이상 인용
if(citations[i] <= h) answer = h;
}
return answer;
}
}
for 루프를 돌고 나면 마지막으로 유효하였던 h값이 answer에 저장 될 것입니다.
예를들어 [2, 3, 4, 6, 7, 8, 9, 10]을 가정하겠습니다. 5가 딱 맞아 떨어지는 H-Index인 예제입니다.
4가 마지막으로 h번 이상 인용된 논문이 h편 이상 인용되었으므로 4를 반환해야 한다고 생각했었습니다만 틀렸습니다.
H-index는 h번 이상 인용된 논문이 h편 보다 크거나 같을 때 반환한 값이어야 하므로
6입니다.
따라서 if(citations[i] <= h) answer = h 이 아닌 if(citations[i] >= h) return h이 되어야 옳바른 값을 리턴합니다.
전체적인 H-index에 대한 이해는 동일하였습니다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
//[0, 1, 3, 5, 6]
Arrays.sort(citations); //순서는 상관 없음
int answer = 0;
for(int i=0;i<citations.length;i++){
int h = citations.length - i; //h편 이상 인용
if(citations[i] >= h) return h; //값이 크거나 같아지면 그 값임
}
return answer;
}
}
크거나 같아질 때의 값이
H-Index입니다