본문 바로가기

Web/Algorithm

[ 프로그래머스 > 정렬 ]H-Index

문제 이해하기)

배열 안의 각 요소를 elem이라고 할 때 elem은 각 논문의 인용 횟수를 말하는데,

elem이 h보다 작거나 같을 때는 elem값을,

elem이 h보다 클 때는 h값을 h-index값으로 넣어야 한다.

이렇게 각 논문 마다의 h-index 값을 구한 뒤, 이 h-index값들 중 가장 큰 값을 최종 h-index값으로 반환해야 함.

 (문제에서 "나머지 논문이 h번 이하 인용"이 말은 h값이 될 수 있는 수중 가장 작은 수가 h가 되고,

이렇게 결정 된 h들 중에서 최댓값이 되어야 한다는 뜻이다. )

위의 예제를 예로들면
citations = [3,0,6,1,5];
//elem === 3 이면 h는 3,6,5로 3 elem === h 즉 3을 반환
//elem === 0 이면 h는 0,1,3,5,6으로 5지만, elem과h 중 더 작은 값을 반환해야 하므로 0반환
//elem === 6, h 는 6으로 1 이므로 h값 1 반환
//elem === 1, h는 1,3,5,6으로 4. elem값 1반환
//elem === 5, h는 5,6으로 2. h값 2반환

//이렇게 h-index 는 3,0,1,1,2가 되는데, 이 중 가장 큰 3값이 최종 h-index값이 된다.  

//추가로,
citations = [5,5,5,5];// 인 경우엔 최종 h-index값이 4

내 통과 코드

function solution(arr) {
    let answer = 0;
    let h = [];
    let cnt = 0;

    for(let elem of arr){
        arr.forEach((v) =>{
            v >= elem ? cnt+=1 : cnt += 0;
        });
        if(elem <= cnt) h.push(elem);
        else{h.push(cnt)}
        cnt = 0;
    }
    h.sort((a,b) => {return b-a;});
    return answer = h[0], answer;
}

 

좋아요 가장 많았던 코드

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;
     }
}