알고리즘, 자료구조/프로그래머스
[Javascript] 프로그래머스 H-index
jaee
2020. 6. 26. 15:02
문제
https://programmers.co.kr/learn/courses/30/lessons/42747
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index이다. 그러니까 H-Index는 무조건 과학자가 발표한 논문 n편 이하의 숫자가 된다.
풀이방법
function solution(citations) {
var answer = 0;
citations.sort((a, b) => b - a);
// 인용된 논문 개수를 기준으로 잡고 확인한다 -> 최소: 0, 최대: citations.length + 1
for(let i = 0; i < citations.length + 1; i++){
// h-index가 될 수 있는 값
let h = 0;
// citation: 특정 논문이 인용된 횟수
citations.forEach(citation => {
// 만약 이 논문이 인용된 횟수가 기준 i번 이상이라면 h++
if(citation >= i) h++;
})
// h-index가 되기 위해서 i만큼 인용된 논문의 개수가 i 이상이어야 된다.
// 이 기준에 부합한다면 answer에 i를 저장한다
if(h >= i){
answer = i;
// 이 기준에 부합한다면 break로 탈출한다
}else{
break;
}
}
return answer;
}
테스트 케이스
[10, 9, 4, 1, 1] 3
[0, 1, 3, 5, 5, 5, 5, 5, 5, 6] 5
[0, 1, 1, 1, 1, 3, 3, 4] 3
[5, 5, 5, 0] 3
[9, 9, 8, 7] 4
[5, 5, 5, 5] 4
[5, 5, 5, 5, 5] 5
[2, 2, 2, 2, 2] 2
[0, 0, 0, 0] 0