나의 풀이

소스

function solution(citations) {
    const _citations = [...citations];
    
    _citations.sort((a, b) => {
        return b - a;
    });
        
    if (_citations.length === 0 || _citations[0] === 0) {
        return 0;
    }
    
    if (_citations.length === 1) {
        return 1;
    }
    
    for (let h = 1; h < _citations.length + 1; h++) {
        if (h >= _citations[h]) {
            return h;
        }
    }
    
    return _citations.length;
}

설명

H-index 구하는 공식은 위키에 있다.

정렬 후 큰 수부터 카운팅을 해가면서 카운팅한 수와 다음 수가 같으면 끝마치면 된다.

다만,

  • [0,0,0] => 0
  • [99] => 1
  • [5,5,5,5,5] => 5

에 대한 TEST CASE만 충족시키도록 예외처리를 해야 한다.

다른사람의 풀이

function solution(citations) {
     citations = citations.sort(sorting);
     var i = 0;
     while(i + 1 <= citations[i]){
         i++;
     }
     return i;


     function sorting(a, b){
         return b - a;
     }
}

compare 함수를 익명함수로 했으면 어땠을까 하지만 아주 잘 풀었다.