[4,4,4,4,5,5,5,5,5,6,6,6,6,6,6]의 h-index값은 6이다.
h번 이상 인용된 논문이 h편 이상, 나머지 논문은 h번 이하
h-index가 4라고 생각한다면,
4번 이상 인용된 논문은 4편 이상이지만, 5,6회 도 인용이 되었으므로 h번 이하에는 조건이 만족되지 않는다. 따라서 땡.
h-index가 5라고 생각한다면,
5번 이상 인용된 논문은 5편 이상이지만, 6회도 인용이 되었으므로 h번 이하에는 조건이 만족되지 않는다. 따라서 얘도 땡.
h-index가 6이라고 생각한다면,
6번 이상 인용된 논문은 6편 이상이고, 6회까지 인용이 되었으므로 h번 이하에도 조건이 만족한다.
따라서 h-index는 6만 된다.
결과적으로 h번 이상 인용된 눈문이 h편 이상이되는 h의 최대값을 구하는 문제다.
즉, 높은 인용수부터 내려오면서 iteration을 돌다가 가장 처음으로 조건을 만족하는 h값을 리턴해주면 된다.
function solution(citations) {
citations = citations.sort((a, b){
return b - a;
});
var h = 0;
while(h + 1 <= citations[i]){
h++;
}
return h;
}
논문인용수(citations)가 h보다 큰 경우 h인덱스값을 하나씩 증가시켜주다가 그 수가 h의 값과 같아지는 순간 해당 h의 값을 리턴시켜준다.
인용수가 아래와 같다면.:
var citations = [3, 0, 6, 1, 5];
sort()되고나서 [6,5,3,1,0]이 되었다.
h = 0;
while(0+1 <= 6) 6보다 작으니까 h++를 만나서 h = 1이된다.
h = 1;
while(1+1 <= 5) 5보다 작으니까 h++를 만나서 h = 2가 된다.
h = 2;
while(1+2 <= 3) 논문인용수인 3, 그리고 h-index가 3일때 같아지므로 해당 h값을 return 시킨다.
뿅.
[추가]
0일 경우에는 처음부터 조건이 만족하기 때문에 바로 0이 return 됨.