https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
Problem 💻
문제 설명
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
|
Solution 💡
H-Index는 다음과 같은 조건을 만족하는 h의 최댓값을 찾는 문제이다.
- h번 이상 인용된 논문이 h편 이상 존재해야 한다.
이를 효율적으로 계산하기 위해, 논문 인용 횟수를 오름차순으로 정렬한 뒤, 각 논문을 검사해야한다.
- 현재 논문의 인용 횟수를 citations[i]라고 하고, 남은 논문의 수를 h = n - i라고 정의한다.
- 만약 citations[i] >= h라면, 조건을 만족하는 첫 번째 h값이 최대값이 된다.
정렬된 리스트를 탐색하기 때문에, 조건을 처음 만족하는 값이 바로 최대값임이 보장된다.
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
int n = citations.length; // 논문의 개수
Arrays.sort(citations);
for (int i = 0; i < n; i++) {
int h = n - i; // 남은 눈문의 수
// 논문의 인용값이 남은 인용보다 크거나 같은 경우
if (citations[i] >= (n - i)) {
// 정렬됨에 따라 조건에 처음 맞는 값이 최대값이다.
return h;
}
}
return 0;
}
}