반응형
문제 설명
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.java
이 문제는 이해하기가 어려워서 그렇지 문제를 이해한다면 코드를 짜기에는 난이도가 높지는 않습니다.
h인덱스가 뭔지에 대해 문제를 아무리 봐도 이해가 힘들 수 있는데요
문제에서 제공해준 위키백과에 설명한 내용을 바탕을 쉽게 풀이해서 설명하면 다음과 같습니다.
* 배열의 값이 [3, 0, 6, 1, 5] 이라고 가정하고 설명하겠습니다.
먼저, 인용의 수가 많은 순서대로 내림차순하여 정렬합니다.
그 다음 논문 수가 논문 인용 수보다 더 작아지기 시작하는 전의 값이 h-index가 됩니다.
이 내용을 바탕으로 코드를 한줄 씩 봅시다.
import java.util.Arrays;
public class H_index {
public static void main(String[] args) {
System.out.println(solution(new int[] {3, 0, 6, 1, 5}));
}
public static int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
for (int i = 0; i < citations.length; i++) {
int discussionCount = citations.length - i;
if (citations[i] >= discussionCount) {
answer = discussionCount;
break;
}
}
return answer;
}
}
문제 풀이
위 설명에서는 내림차순 정렬하여 한다했지만, H-index는 보통 맨 뒤쪽에 있으므로 오름차순하여 찾는다면 더 빨리 찾을 수 있습니다.
- citations를 오름차순 정렬한다.
- 맨 앞의 논문 인용 수(citations)부터 반복문을 시작하여 논문의 개수(discussionCount)를 하나씩 줄여갑니다.
- 위 설명에서는 내림차순을 하여 설명했지만 여기서는 오름차순을 했기 때문에, 반대로 논문 인용 수가 논문의 개수보다 크거나 같아지면 그 수가 H-index가 됩니다.
논문 인용 수 | 비교 | 논문 수 | |||||
index | citations[i] = 0 |
citations[i] = 1 |
citations[i] = 2 |
citations[i] = 3 |
citations[i] = 4 |
||
0 | 0 | 1 | 3 | 5 | 6 | < | 5 |
1 | 0 | 1 | 3 | 5 | 6 | < | 4 |
2 | 0 | 1 | 3 | 5 | 6 | = | 3 |
3 | 0 | 1 | 3 | 5 | 6 | > | 2 |
4 | 0 | 1 | 3 | 5 | 6 | > | 1 |
'◼ 코딩테스트 > 구현 (Implementation)' 카테고리의 다른 글
[Java/자바] 프로그래머스 Lv2 - [1차]캐시 (LRU 알고리즘) (0) | 2023.01.11 |
---|---|
[Java/자바] 프로그래머스 Lv2 - 행렬의 곱셈 (0) | 2023.01.10 |
[Java/자바] 프로그래머스 Lv2 - 점프와 순간이동 (0) | 2023.01.05 |
[Java/자바] 프로그래머스 Lv2 - 예상 대진표 (0) | 2023.01.04 |
[Java/자바] 프로그래머스 Lv2 - N개의 최소공배수 (유클리드 호재법) (2) | 2023.01.03 |