2026.4.20, 2026.4.21 (작성일: 2026.4.22)
https://school.programmers.co.kr/learn/courses/30/lessons/42747
function solution(citations) {
const sorted = citations.sort((a, b) => b - a);
const answer = sorted.findIndex((e, i) => e < i + 1);
// 마지막 e도 i + 1보다 크거나 같으면 index = -1
// 모든 논문이 전체 논문 개수 이상으로 인용되었으므로, hIndex = 전체 논문 개수
return answer === - 1 ? citations.length : answer;
}
function solution(citations) {
const sorted = citations.sort((a, b) => b - a);
const answer = sorted.filter((e, i) => e >= i + 1).length;
return answer;
}
findIndex 결과가 -1인 경우에 대한 예외 처리가 필요주어진공식적으로, f가 각 출판물에 대한 인용 횟수에 해당하는 함수라고 할 때, h-index를 다음과 같이 계산합니다: 먼저 f의 값을 가장 큰 값부터 가장 작은 값으로 정렬합니다. 그런 다음, f가 위치(h라고 부르는 이 위치)보다 크거나 같은 마지막 위치를 찾습니다. 예를 들어, 5편의 출판물 A, B, C, D, E가 각각 10, 8, 5, 4, 3번의 인용을 받았다면, h-index는 4입니다. 왜냐하면 4번째 출판물이 4번의 인용을 받았고, 5번째는 3번만 인용을 받았기 때문입니다. 반면에, 같은 출판물이 25, 8, 5, 3, 3번의 인용을 받았다면, 인덱스는 3입니다. 즉, 3번째 위치입니다. 왜냐하면 4번째 논문이 겨우 3번만 인용을 받았기 때문입니다.
citations 배열을 내림차순으로 정렬하고, element와 index를 비교하면 되겠구나.element >= index + 1을 만족하는 순간까지이니까,index를 찾으면 되겠다, 생각했다. (만족하지 않는 첫번째 index의 직전 element의 index + 1 = 만족하지 않는 첫번째 element의 index - 1 + 1)element가 자신의 index + 1보다 크거나 같은 케이스 중 가장 큰 index + 1이 H-Index인 것이다.findIndex에서 -1을 반환하는 경우다. 그런 상황은 언제 발생하나? 배열의 모든 요소가 e < i +1을 만족하지 않을 때, 즉 모든 element가 자신의 index + 1보다 크거나 같을 때이다.citations = [1, 2, 3, 4]라면, H-Index는 -1이 아니라 4가 되어야 한다. 그리고 그것은 전체 논문의 개수 = citations.length와 같다.element가 자신의 index + 1보다 크거나 같은 요소만 남기고 그것의 length를 구하면 그게 H-Index와 같다.findIndex가 받는 콜백함수에서 index도 인자에 있는지 체크했다.