알고리즘, 자료구조/프로그래머스

[Javascript] 프로그래머스 H-index

jaee 2020. 6. 26. 15:02

문제

https://programmers.co.kr/learn/courses/30/lessons/42747

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

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

 

풀이방법

function solution(citations) {
    var answer = 0;
    citations.sort((a, b) => b - a);
    
    // 인용된 논문 개수를 기준으로 잡고 확인한다 -> 최소: 0, 최대: citations.length + 1 
    for(let i = 0; i < citations.length + 1; i++){
    	// h-index가 될 수 있는 값
        let h = 0;
        // citation: 특정 논문이 인용된 횟수
        citations.forEach(citation => {
            // 만약 이 논문이 인용된 횟수가 기준 i번 이상이라면 h++
            if(citation >= i) h++;
        })
        // h-index가 되기 위해서 i만큼 인용된 논문의 개수가 i 이상이어야 된다.
        // 이 기준에 부합한다면 answer에 i를 저장한다
        if(h >= i){
            answer = i;
        // 이 기준에 부합한다면 break로 탈출한다
        }else{
            break;
        }
    }
    
    return answer;
}

 

테스트 케이스

[10, 9, 4, 1, 1]  3
[0, 1, 3, 5, 5, 5, 5, 5, 5, 6]  5
[0, 1, 1, 1, 1, 3, 3, 4]  3
[5, 5, 5, 0] 3
[9, 9, 8, 7] 4
[5, 5, 5, 5] 4
[5, 5, 5, 5, 5] 5
[2, 2, 2, 2, 2] 2
[0, 0, 0, 0] 0