H-Index (level 2)

원용현·2022년 10월 17일
0

프로그래머스

목록 보기
30/49

링크

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

문제

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

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

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

문제 이해

이 문제를 풀 때, 문제를 읽고 H-Index를 구하는 코드를 작성하면 제대로된 테스트를 통과하지 못한다. H-Index에 대한 설명이 이상하게 나와있어서 이런 문제가 생기는데, 다음과 같은 방법으로 H-Index를 구하면 된다.

H-Index를 구할 때, 논문 n편 중, h번 이상 인용된 논문이 h편 이상이라면 이 때, h의 최댓값이 이 과학자의 H-Index이다.

실제 H-Index를 구할 때는 h번 이하 인용된 경우에 대해서는 생각을 하지 않아도 무방하다.

코드

function solution(citations) {
    let up = 0
    
    for(let i = Math.max(...citations); i >= 0; i--) {
        up = citations.filter(el => el >= i).length
        if(i <= up) return i
    }
}

코드 풀이

h의 최댓값은 citations 배열에 있는 값들 중에서 가장 큰 값이 될 수 있으므로 반복문의 시작을 배열에서 가장 큰 값부터 시작해서 -1씩 진행하며 줄여나간다.

코드 자체는 간결하게 Array의 filter 함수를 사용하여 H-Index를 구하는 방법에 따라 필터링하여 포함되는 요소들의 길이를 구한다.

배열의 길이와 현재 배열을 진행 중인 변수에 대해서 조건에 알맞으면 값을 반환한다.

0개의 댓글