문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다.
어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중,
h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면
h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때,
이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
입출력 예
[3, 0, 6, 1, 5] | 3 |
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.
힌트가 필요한가요? [코딩테스트 연습 힌트 모음집]으로 오세요! → 클릭
※ 공지 - 2019년 2월 28일 테스트 케이스가 추가되었습니다.
완전 처음에는 arr을 오름차순 sorting해서
내 자신의 숫자가 n 이라면 내 뒤에 n-1 개 이상 있으면 h를 나 자신으로 바꾼다. 라는 식으로 접근했다.
그런데 [3, 7, 7, 7, 7] 의 경우 아예 배열에 없는 숫자 4가 리턴되야 하므로, 전략을 수정했다.
function solution(arr) {
const max = Math.max.apply(null, arr);
let h = 0;
let count = 0;
let i = 1;
while ( i <= max ) {
for (let j = 0; j <= arr.length; j++){
if (i <= arr[j]) {
count++;
}
}
if (count > h) h = i;
count = 0;
i++;
};
return h;
}
i부터 배열의 요소를 쫙 돌면서 i보다 크거나 같은 요소가 있을 때 count를 증가시켜준다.
count가 h보다 클 경우 h에 i를 할당한다.
이런 식으로 쭉 돌면 [3, 7, 7, 7, 7] 에서 h에 4까지 할당될 수 있고 조건을 만족시킬 수 있다.
*** 처음에는
const min = Math.min.apply(null, arr);
위 코드를 max 다음 줄에 써서,
min 부터만 탐색하면 된다고 생각했다. 어차피 최솟값이 그 밑으로 떨어질 리는 없으니..
근데 [10, 10, 10, 10, 10] 의 경우,
최솟값이 10으로 할당되어, H-Index 가 10이 나와버리게 된다.
그래서 1부터 탐색하는 걸로 바꿨다.
'프론트엔드 개발 > Algorithm' 카테고리의 다른 글
javascript bubble sort (0) | 2023.02.16 |
---|---|
재귀 연습문제 (0) | 2023.02.14 |
Big-O 표기법 (0) | 2023.02.12 |
프로그래머스 lv2. 점프와 순간 이동 (0) | 2023.02.04 |
프로그래머스 lv2. 카펫 (0) | 2023.01.30 |