먼저 예시를 몇 가지 들어보겠다.
citations = [1,3,5,5,5,5]
4번 이상 인용된 논문이 4편 있으므로 H-Index는 4다.
citations = [1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
5번 이상 인용된 논문이 5편 이상 있으므로 H-index는 5다.
citations의 length가 굉장히 길지만 5까지만 보면 된다.
위 예시를 통해 몇 가지 사실을 알 수 있다.
- citations의 요소가 아니어도 H-index가 될 수 있다.
- for문을 돌려서 citations 요소가 아닌 Index도 조사해야 한다.
- for문을 0부터 citations 요소의 최댓값까지만 조사하면 충분하다.
우선 citations의 최댓값 MAX_VALUE를 구한다.
H-Index는 기본값으로 0을 선언한다.
0 ~ MAX_VALUE까지 for문을 돌린다.
남아있는 배열의 길이가 i 이상이면 H-Index의 값으로 i를 준 다음, i 미만인 요소들을 전부 제거한다.
예시
i = 0일 때:
H-Index = 0
citations = [3, 2, 2, 2, 2, 2, 1]
i = 1일 때:
H-Index = 1
citations = [3, 2, 2, 2, 2, 2]
i = 2일 때:
H-Index = 2
citations = [3]
i = 3일 때:
H-Index = 2
citations = [3]
따라서 H-Index의 값은 2다.
이런 식으로 구현하면 해결된다.
function solution(citations) {
let MAX_VALUE = Math.max(...citations);
let answer = 0;
for (let i = 0; i <= MAX_VALUE; i++) {
if (citations.length >= i) {
answer = i;
citations = citations.filter(v => v > i);
}
}
return answer;
}