[Version]
⦁ 2024.04.26 / [Algorithm / Programmers] H-Index
import java.util.*;
class Solution {
public int solution(int[] citations) {
// 배열을 오름차순으로 정렬합니다.
Arrays.sort(citations);
// h-index 값을 저장할 변수를 초기화합니다.
int hIndex = Integer.MIN_VALUE;
// 각 논문에 대해 반복하면서 h-index를 계산합니다.
for(int i = 0; i < citations.length; i++) {
// 현재 논문의 인용 횟수와 나머지 논문의 수 중 작은 값을 구합니다.
int minCitations = Math.min(citations[i], citations.length - i);
// 현재 계산된 h-index 값과 minCitations 값 중 큰 값을 hIndex에 저장합니다.
hIndex = Math.max(hIndex, minCitations);
}
// 최종적으로 계산된 h-index 값을 출력합니다.
System.out.println(hIndex);
// 계산된 h-index 값을 반환합니다.
return hIndex;
}
}
문제를 처음 접했을 때, H-Index의 정의를 이해하는데 시간이 걸렸다. H-Index의 정의는 어떤 과학자가 발표한 논문 N편 중 H번 이상 인용된 논문이 H편 이상이고 나머지 논문이 H번 이하 인용되었다면 H의 최댓값이 과학자의 H-Index라고 한다.
즉, H-Index는 선언된 배열 내에서 H번 이상 인용된 논문이 H편 이상일 경우 H의 값을 칭하는 것이다. 따라서 나는 배열을 오름차순으로 정렬한 후 현재 선택된 원소가 남은 원소의 개수보다 작거나 같을 경우 H-Index의 값을 갱신했고 그 결과는 아래 코드와 같다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
Arrays.sort(citations);
int hIndex = Integer.MIN_VALUE;
for(int i = 0; i < citations.length; i++) {
if(citations[i] <= citations.length - i) {
hIndex = citations[i];
}
}
return hIndex;
}
}
문제의 예시에서는 중복된 경우가 없었기 때문에 테스트케이스는 통과했지만 문제를 제출하니 틀렸다는 결과가 나왔다. 때문에 중복된 경우의 수를 생각하여 소스코드를 수정했다. 현재 논문의 인용횟수와 남은 논문의 개수 중 더 작은 값을 저장한 후 H-Index보다 값이 클 경우 갱신하는 방식으로 문제를 해결할 수 있었다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[Algorithm / Programmers] 2017 팁스타운-예상 대진표 (0) | 2024.04.30 |
---|---|
[Algorithm / Programmers] 프로세스 (0) | 2024.04.26 |
[Algorithm / Programmers] 카펫 (0) | 2024.04.23 |
[Algorithm / Programmers] 2022 KAKAO BLIND RECRUITMENT-k진수에서 소수 개수 구하기 (0) | 2024.04.08 |
[Algorithm / Programmers] 완전탐색-피로도 (0) | 2024.04.08 |