본문 바로가기

프로그래머스/JavaScript

[프로그래머스 JavaScript] Level2 H-Index

- 논문 n편 중, h번 이상 인용된 논문이 h편 이상일때, h의 최댓값이 이 과학자의 H-Index

- 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return

- 논문의 수는 1편 이상 1,000편 이하

- 인용 횟수는 0회 이상 10,000회 이하

 

 

function solution(citations) {
    var answer = 0;

    for (let h = citations.length; h > 0; h--) {
        let q = 0;
        q = citations.filter(e => e >= h).length;
        answer = q === h && answer < h ? h : answer;
    }

    return answer;
}

채점결과 11번만 오류

 

h번 이상 인용된 논문이 h편 이상

위의 조건을 만족하지 못해 생긴 오류로 만족할수 있도록  q === h 를  q >= h 로 수정

 

[최종코드]

function solution(citations) {
    var answer = 0;

    for (let h = citations.length; h > 0; h--) {
        let q = 0;
        q = citations.filter(e => e >= h).length;
        answer = q >= h && answer < h ? h : answer;
    }

    return answer;
}

 

정렬했을때, 남은 갯수가 자신의 숫자보다 작은 경우는 어차피 조건에 해당되지 않는다

그렇기 때문에 검사하는 횟수를 줄여 시간을 단축시켰다.

function solution(citations) {
    var answer = 0;
    
    citations.sort((a, b) => a - b);
    const max = citations.filter((e, i) => e >= citations.length - i).shift();
    
    for (let i = max; i > 0; i--) {        
        let q = citations.filter(e => e >= i).length;
        if (i <= q) {
            return answer = i
        }
    }    
    return answer;
}