본문 바로가기
ALGORITHM/프로그래머스 With JS

[프로그래머스] H-Index / Javascript

by LAY CODER 2021. 5. 3.

문제

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

 


 

TRY

function solution(citations) {

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

    let answers = 0;
    for (let i = 0; i < citations.length; i++) {
        if (i < citations[i]) {
            answers++;
        }
    }

    return answers;
}

console.log(solution([47, 42, 32, 28, 24, 22, 17, 15, 10, 10, 8]));
console.log(solution([3, 0, 6, 1, 5]));

문제 이해가 어려운 문제였다.

 

 

[연구논문을 위한 핵심 10단계] H-지수(H-Index) 란 무엇인가?

일반적으로 특정 연구원의 연구성과를 평가하기 위해 얼마나 많은 논문을 발표 하였는지를 보게됩니다. 그러나 단순히 발표한 논문 수로만 그 연구원의 연구 업적을 평가 하기에는 발표한 논문

www.ibric.org

 

위 링크가 문제 풀이에 꽤 많은 도움을 줘서 문제가 잘 이해되지 않는 사람들은 참고하면 좋을 것 같다.

 

논문 인용횟수를 내림차순으로 정렬하고 배열 길이만큼 for문을 돌린다.

 

자신의 인용횟수(cittations[i])가 자신보다 인용횟수가 많은 논문 수(i) 보다 많으면 정답 수를 1 증가시킨다.

 

자신의 인용횟수가 자신보다 인용횟수가 많은 논문 수와 같아 질때 의 answer를 return하면 정답이다.

 

 

 

 

 


 

Refactoring

function solution(citations) {
    citations = citations.sort((a, b) => b - a);
    let i = 0;
    while (i + 1 <= citations[i]) {
        i++;
    }
    return i;

}

console.log(solution([47, 42, 32, 28, 24, 22, 17, 15, 10, 10, 8]));
console.log(solution([3, 0, 6, 1, 5]));

 

같은 방식이지만 while문을 이용해서 구하면

 

for문처럼 논문 수 전체를 돌지 않고 H-index가 나오는 시점에 반복문이 멈추기 때문에

 

더 효과적인 방법이라고 생각한다.

댓글