문제 이름:
H-Index
문제 설명:
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n 편 중, h번 이상 인용된 논문이 h 편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해 주세요.
코드:
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
int leng = citations.length;
Arrays.sort(citations);
for(int i = 0; i < leng; i++){
int h = leng - i;
if(citations[i] >= h){
return h;
}
}
return answer;
}
}
H-index를 구하는 방법을 찾아보니
h- 인덱스는 h 개의 논문이 각각 최소 h개의 인용을 갖는 가장 큰 숫자 h입니다. 예를 들어, 저자가 9, 7, 6, 2, 1개의 인용(가장 큰 것부터 가장 작은 것 순으로 정렬)을 가진 5개의 출판물을 가지고 있다면, 저자의 h- 인덱스는 3입니다. 왜냐하면 저자가 3개 이상의 인용을 가진 3개의 출판물을 가지고 있기 때문입니다. 그러나 저자는 4개 이상의 인용을 가진 4개의 출판물을 가지고 있지 않습니다.
분명히 저자의 h- 인덱스는 출판물의 수만큼만 커질 수 있습니다. 예를 들어, 출판물이 하나뿐인 저자는 최대 h- 인덱스가 1일 수 있습니다(출판물이 1개 이상 인용된 경우). 반면, 출판물이 많고 각각 인용이 1개뿐인 저자도 h- 인덱스가 1일 수 있습니다.
형식적으로, f가 각 출판물의 인용 횟수에 대응하는 함수라면, 다음과 같이 h- 지수를 계산합니다. 먼저 f의 값을 가장 큰 값에서 가장 작은 값 순으로 정렬합니다. 그런 다음, f가 위치보다 크거나 같은 마지막 위치를 찾습니다 (이 위치 h라고 합니다 ). 예를 들어, 각각 10, 8, 5, 4, 3회의 인용을 받은 5개의 출판물 A, B, C, D, E를 보유한 연구자가 있다면, 4번째 출판물은 인용이 4회이고 5번째 출판물은 인용이 3회뿐이므로 h- 지수는 4입니다. 반면에 같은 출판물의 인용이 25, 8, 5, 3, 3회라면, 4번째 논문은 인용이 3회뿐이므로 지수는 3(즉, 3위)입니다.
f (A)=10, f (B)=8, f (C)=5, f (D)=4, f (E)=3 → h- 지수=4
f (A)=25, f (B)=8, f (C)=5, f (D)=3, f (E)=3 → h- 지수=3
함수 f를 가장 큰 값에서 가장 작은 값까지 내림차순으로 정렬하면 다음과 같이 h- 인덱스를 계산할 수 있습니다.
h-index (f) = max {i∈N:f(i)≥i}
출처:: https://en.wikipedia.org/wiki/H-index
이런 식으로 나와 있었다
논문에 사용된 인용의 개수가 배열로 나와있으니 배열의 길이가 논문의 개수로 볼 수 있다.
h-index 찾는 방법 :
정렬된 인용 횟수 목록에서 순서대로 인용 횟수와 순위를 비교합니다.
인용 횟수와 해당 논문의 순위(1부터 시작, 정렬된 배열에서의 위치)를 비교하며,
인용 횟수가 순위보다 작아지는 지점에서 h-index를 결정합니다.
배열을 오름차순 정렬을 먼저 해준다.(내림차순으로 정렬을 하고 순서대로 비교를 해야 하지만 뒤에서부터 비교를 해도 문제는 없어 보여서 오름차순으로 진행)
반복문을 통해서 각 반복에 h를 5 ~ 1로 지정을 해주고
배열의 각 값이 h보다 크거나 같으면 바로 h를 리턴해준다(논문의 n 편을 리턴)
'알고리즘 문제' 카테고리의 다른 글
(Java) 숫자 사각형 (0) | 2024.08.26 |
---|---|
(Java) 소수 구하기, 팩토리얼, 각 자리 합 (0) | 2024.08.23 |
프로그래머스 (Java) 공원 산책 (0) | 2024.08.07 |
프로그래머스 (Java) 햄버거 만들기 (0) | 2024.08.02 |
getter , setter (0) | 2024.07.24 |