H-index

poburi FE·2020년 3월 9일
0

알고리즘

목록 보기
1/3

문제

풀이

[4,4,4,4,5,5,5,5,5,6,6,6,6,6,6]의 h-index값은 6이다.
h번 이상 인용된 논문이 h편 이상, 나머지 논문은 h번 이하

  1. h-index가 4라고 생각한다면,
    4번 이상 인용된 논문은 4편 이상이지만, 5,6회 도 인용이 되었으므로 h번 이하에는 조건이 만족되지 않는다. 따라서 땡.

  2. h-index가 5라고 생각한다면,
    5번 이상 인용된 논문은 5편 이상이지만, 6회도 인용이 되었으므로 h번 이하에는 조건이 만족되지 않는다. 따라서 얘도 땡.

  3. 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 됨.

profile
FE 개발자 poburi

0개의 댓글