[programmers] 36. H-Index
https://programmers.co.kr/learn/courses/30/lessons/42747
1. 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회 이하입니다.
입출력 예
citationsreturn
[3, 0, 6, 1, 5] | 3 |
입출력 예 설명
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.
2. Code
package programmers;
import java.util.Arrays;
public class H인덱스 {
public static void main(String[] args) {
int[] citations = {3,0,6,1,5};
System.out.println(solution(citations));
}
public static int solution(int[] citations) {
Arrays.sort(citations);
int answer = 0;
for(int i = 0; i < citations.length; i++) {
if(citations[i] >= citations.length-i) {
answer = citations.length-i;
break;
}
}
return answer;
}
}
3. Report
H-Index는 h편 논문이 h편이상 인용되어야 하기 때문에 정답은 논문의 갯수 중에 있다.
먼저, citations 배열을 정렬해준다.
배열을 정렬하고 나면 배열을 순서대로 확인했을때
전에 있는 논문의 인용 수는 무조건 현재 인덱스 논문의 인용 수 이하이다.
그러면 현재 인덱스의 논문이 남은 논문의 갯수보다 인용 횟수가 큰지만 확인하면 된다.
1) 정렬 후 -> {0, 1, 3, 5, 6}
2) i = 0일때, 0 >= 5 (조건에 안맞음)
3) i = 1일떄, 1 >= 4 (조건에 안맞음)
4) i = 2일떄, 3 >= 3 (조건일치) 정답은 3
처음에는 citations[i] <= citations.length-i 일때 anwer = citations[i] 였는데
같은 citations에서 {0, 1, 4, 5, 6}일때 3개이상의 논문이 3편이상인데도 정답이 1로 나오는 상황이 됐다.
정답은 항상 조건을 일치하는 논문 갯수 이지 인용된 횟수가 아니다.
'Algorithm > 문제' 카테고리의 다른 글
[programmers/카카오코드 본선] 38. 단체사진 찍기(순열) (0) | 2021.08.03 |
---|---|
[programmers] 37. 피보나치 수 (0) | 2021.07.29 |
[programmers] 35. 스킬트리 (0) | 2021.07.28 |
[programmers] 34. 프린터 (0) | 2021.07.28 |
[programmers] 33. 다음 큰 숫자 (0) | 2021.07.27 |