-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
문제 설명 | H-Index
연구자의 논문 인용 수 배열 citations가 주어질 때, H-Index를 구하는 문제
H-Index 정의:
- 연구자가 발표한 논문 중 h 편 이상이 h회 이상 인용되었을 때, 가능한 h 값 중 최대값을 구한다.
📝 제약조건
1 <= citations.length <= 5000(논문의 개수)0 <= citations[i] <= 1000(각 논문의 인용 횟수)
💡 예시
Example 1
Input:
citations = [3, 0, 6, 1, 5]Output:
3Explanation:
- 논문 인용 횟수:
[3, 0, 6, 1, 5] - 정렬 후:
[6, 5, 3, 1, 0] h = 3일 때, 3편 이상이 3회 이상 인용됨 → 최대 h-index는3
🚀 문제 해결 과정
Step 1: 문제 이해하기
작은 예시로 직접 계산해보기
| 논문 개수 | 인용 횟수 배열 | h-index 계산 |
|---|---|---|
| 1개 | [5] |
1 |
| 2개 | [4, 5] |
2 |
| 3개 | [10, 8, 5] |
3 |
- 논문의 개수가
h편 이상이고, 각 논문이 h번 이상 인용되었을 때의h중 최대값을 찾아야 한다.
Step 2: 접근 방법
💡 직관적인 접근법 (완전탐색)
- 모든
h에 대해 논문 개수를 세고 조건을 만족하는h중 최댓값 찾기 → O(n²) (비효율적)
💡 정렬을 활용한 방법 (O(n log n))
- 내림차순 정렬 → 인용 횟수가 큰 순서대로 정렬
- 왼쪽에서부터 탐색하면서 h-index 찾기
- 현재
i + 1개의 논문이citations[i]이상 인용되었는지 확인 - 조건이 깨지는 순간, 최대
h를 반환
- 현재
Step 3: 코드 설계
citations배열을 내림차순 정렬for문을 돌면서i + 1번째 논문의 인용 횟수와 비교- 조건을 만족하는 최대
h-index를result에 저장 - 조건이 깨지는 순간
result반환
Step 4: 코드 구현
/**
* @param {number[]} citations
* @return {number}
*/
var hIndex = function(citations) {
// 1. 내림차순 정렬
citations.sort((a, b) => b - a);
let result = 0;
// 2. 정렬된 상태에서 h-index 찾기
for (let i = 0; i < citations.length; i++) {
if (citations[i] >= i + 1) {
result = i + 1;
} else {
break; // 조건이 깨지면 중단
}
}
return result;
};Metadata
Metadata
Assignees
Labels
No labels