문제
- 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