📌 문제
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
📌 제한사항
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
📌 입출력 예
citations | return |
[3, 0, 6, 1, 5] | 3 |
📌 풀이
알아야 하는 것
문제가 정말 이해가 되지 않아 한참 고민하다가 그냥 검색했다. 문제를 이해하려고 하지 말고 그냥 내가 H-index가 뭔지 검색해보는 게 더 빨랐다. H-Index는 결국 많이 인용된 순으로 정렬(내림차순) 후 인용 횟수 h가 h편이 된 순간을 구하면 되는 것이다. ^^
구할 것
내림차순으로 정렬 후 for문으로 순회하면서 인용 횟수를 확인한다.
이 때 반복하는 변수 i는 지금 확인하고 있는 인용 횟수, citations[i]는 인용 횟수가 큰 순서대로 정렬된 배열에서 현재 있는 위치다.
따라서 i >= citations[i]라면 i가 H-Index 후보가 된다.
0 >= 6
1 >= 5
2 >= 3
3 >= 1
4 >= 0
이 때 4 >= 0도 참이지만 큰 순서대로 진행하기 때문에 최종으로 답은 3이 나온다.
하지만 이 때 citations 배열을 다 돌아도 H-Index를 구하지 못하는 경우가 있을 수 있다.
예컨대 [22, 42]의 경우 0 >= 42, 1 >= 22로 둘다 false가 되어 답을 구할 수 없다.
이는 모든 인용 횟수가 H-Index보다 크다는 뜻으로 최댓값은 논문의 갯수와 동일하게 된다.
따라서 이런 경우는 논문의 갯수를 반환해주면 된다.
function solution(citations) {
citations.sort((a, b) => b - a);
for (let i = 0; i < citations.length; i++) {
if (i >= citations[i]) {
return i;
}
}
return citations.length;
}
솔직히 이건 문제 설명이 너무했다...
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 백준 코딩테스트 : 스택 (0) | 2023.06.29 |
---|---|
[JavaScript] 백준 코딩테스트 : 비밀번호 찾기 (0) | 2023.06.28 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 가장 큰 수 (0) | 2023.06.27 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 소수 찾기 (0) | 2023.06.26 |
[JavaScript] 프로그래머스 코딩테스트 레벨 2 : 피로도 (0) | 2023.06.22 |