정렬_교수의 논문 인용단위 HIndex 구하기

Feb 25th 2020 by jyoon

문제

  • H-Index를 구하라!
  • H-Index란?

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

해결 방법

  • 논문이 "h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하" 이것이 포인트 !
  • 아래처럼 h번이 의미하는 것을 생각해보면 배열을 내림차순으로 정렬하고 순환하며 h를 구할 수 있겠다.

    • 논문 개수 = 배열 길이
    • 한 논문이 인용된 횟수 = 배열 요소

STEP

  • STEP1: 내림차 순으로 정렬
  • STEP2: 배열 index가 인용된 "논문 수" 이고, 배열 요소가 "인용된 횟수"라서
    내림차 순으로 정렬된 배열을 순환하면서 배열 요소("인용된횟수"), 배열index("논문수")와
    비교해 hIndex를 구하고, 순환 유무 flag를 통해서 순환 제어

CODE

citation: 인용구

function solution(citations) {
  var hIndex = 0
  var iteratorFlag = true
  citations
    .sort((a, b) => b - a)
    .forEach((citation, idx) => {
      if (citation > idx && iteratorFlag) {
        ++hIndex
      } else {
        iteratorFlag = false
      }
    })

  return hIndex
}

console.log(solution([3, 0, 6, 1, 5]))
console.log(solution([6, 6, 6, 6, 6]))
console.log(solution([6, 6, 6, 6, 6, 6]))
console.log(solution([6, 5, 4, 3, 2, 1]))
console.log(solution([6, 0, 0, 0, 0, 0]))
console.log(solution([4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6]))

결과

3 5 6 3 1 6