728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=java
[문제]
- 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회 이하입니다.
[입출력 예]
[풀이]
해당 문제는 H-Index가 무엇인지 알고, 구하는 공식만 확인하면 간단하게 풀 수 있는 문제입니다.
H-지수란?
- H-지수는 특정 연구원의 연구 성과를 평가하기 위한 지표로써, 발표한 논문수와 피인용수를 이용하여 보다 객관적으로 학문적 역량을 측정할 수 있습니다. H-지수는 개인뿐만 아니라 연구단체, 기관 또는 국가의 연구 성과를 측정하는 데에도 활용되고 있습니다.
H-지수 구하는 방법
- 피인용수 내림차순으로 정렬한 후 논문 수가 피인용수보다 작거나 같은 리스트 중 제일 마지막 논문 수
먼저 코틀린 코드입니다.
fun solution(citations: IntArray): Int {
val list = citations.sortedDescending()
for (i in list.indices) {
if (list[i] <= i) return i
}
return list.size
}
문제 그대로 내림 차순으로 정렬 후, 아이템 수가 피인용수 이상이 되는 가장 마지막 수치를 반환하도록 했습니다.
다음은 자바 코드입니다.
자바는 내림 차순 정렬이 코드가 길어져서.. 오름 차순 상태에서 이하로 부호를 뒤집어 처리했습니다.
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
// Integer[] citationsWrapper = new Integer[citations.length];
// for (int i = 0; i < citations.length; i++) {
// citationsWrapper[i] = citations[i];
// }
// // Sort the Integer array in descending order
// Arrays.sort(citationsWrapper, Collections.reverseOrder());
int answer = 0;
int total = citations.length;
Arrays.sort(citations);
for(int i = 0 ; i < total ; i++) {
int h_index = total - i;
if(citations[i] >= h_index) {
answer = h_index;
break;
}
}
return answer;
}
}
728x90