본문 바로가기

코딩테스트

[프로그래머스] level2. H-Index (javascript)

반응형

문제

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

나의 풀이

전체 길이만큼 for문을 돌리고, 정해진 조건에 맞는 것들의 갯수만 파악하면 된다.

 

function solution(citations) {
    var answer = 0;
    const len = citations.length;

    for(let i = 1 ; i <= len; i++){
        let tmp = citations.map((a,index)=> a >= i ? 1: 0).reduce((acc,cur)=> acc = acc + cur)
        if (tmp >= i ){
            answer = i
        } else{
            break
        }
    }
    return answer;
}

다른이들의 풀이

 

방법1. while문 사용

 

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

 

방법2. sort를 통해 순차적 처리

 

function solution(citations) {
    var answer = 0;

    citations.sort((a, b) => b - a);

    for(let i = 0; i < citations.length; i++) {
        if(citations[i] > i) answer++;
        else break;
    }

    return answer;
}

 

sort로 정렬할수 있는 조건인지 아닌지 확인하고 활용해보자!

반응형