한 걸음씩

[프로그래머스][JS] H-Index ✅ 본문

Programmers

[프로그래머스][JS] H-Index ✅

winter17 2023. 8. 16. 18:44

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(citations) {   
    // citations = [3, 0, 6, 1, 5]
    // 논문들의 인용횟수를 내림차순으로 정렬
    const H = citations.sort((a, b) => b - a)
    // H = [6, 5, 3, 1, 0]
    let cnt = 0 // 현재 순번까지의 논문 중 인용 횟수가 순번 이상인 논문의 개수
    for (let i = 1; i <= H.length; i++){
        H.forEach(item => {
            // 인용 횟수가 논문의 순번보다 크거나 같은 경우 해당 논문은 카운트
            if (i <= item){
                cnt++
            }
        })
        // 논문 인용 횟수(cnt)가 순번 이상(i)일 경우 리턴
        if (i >= cnt){
            return cnt
        }
        cnt = 0
    }
}

 

정렬된 citations = [6, 5, 3, 1, 0] 일 때

i = 1 -> 6, 5, 3, 1 (4번)

i = 2 -> 6, 5, 3 (3)

i = 3 -> 6, 5, 3 (3) : 순번(i)이 3일 때, 논문 인용 횟수가 3이상 → 3번 이상 인용된 논문이 3편 이상이고, 나머지 논문은 3번 이하 인용되었다. 때문에 H-index는 3이다.

i = 4 -> 6, 5 (2)

i = 5 -> 6, 5 (2)


리뷰

처음 문제를 시도했을 때 정렬하지 않고 주어진 배열 그대로, i === cnt 조건으로 풀었는데 통과하지 못했다.

왜 내림차순 정렬을 해야하고 마지막 조건문에서 i >= cnt가 참이 되어야 리턴을 할 수 있는지 이 부분이 이해가 잘 되지 않는다