function solution(citations) {
let max = Math.max(...citations) // 최대값(h)
// h번 이상 인용된 논문이 h번 이상이고,
// 나머지 논문이 h번 이하 인용되었다.
// 이때 h의 최대값을 구하여라
// 1. 인용 배열에서 최대값을 구하자.
// 2. 값이 (최대값) 이상인 요소들이 (최대값)개 이상인지?
// 3. 2번 조건을 만족한다면 나머지 요소들이 값이 모두 최대값 이하인지?
// 4. 조건을 만족할 때까지 최대값을 1씩 감소시키자.
while(1) {
let maxArr = []
// arr의 요소들이 최대값 이상인 요소들이 최대값 개 이상인지 검사
for(let i = 0; i < citations.length; i++) {
if(citations[i] >= max) {
maxArr.push(citations[i])
}
}
if(maxArr.length >= max) { // h번 이상 인용된 논문이 h편 이상인 경우
// 나머지 요소들은 h 이하인지 검사 => 맞으면 max 반환
return max
} else { // 그렇지 않은 경우
max -= 1
continue;
}
}
}
위 과정을 요약하면 다음과 같다.
function solution(citations) {
let hIndex = 0;
citations.sort((a,b)=>(b-a))
while(hIndex + 1 <= citations[hIndex]){
hIndex++;
}
return hIndex
}