H Index

문제정의


어떤 과학자의 H 인덱스를 구하는 문제이다. H 인덱스란 어떠한 학자가 발표한 논문 n편중에 h번이상 발표한 논문이 h편이상일 때 이 h의 최대값이다. 이해가 어려울 수도 있는데 그런 사람을 위해 질문하기에 있었던 링크를 첨부한다.

문제풀이


전체 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;

public class HIndex {

//프로그래머스 문제풀이 level2 H-Index

public static void main(String[] args) {
int[] citations = {22, 42};
int answer = 0;
Arrays.sort(citations);
for(int i = citations.length-1; i >= 0; i--)
{
if(citations.length-i >= citations[i])
{
answer = citations.length-i-1;
break;
}
}
if(citations[0] > citations.length)
answer = citations.length;
System.out.println(answer);

}

}
필자의 경우 처음으로 h를 만족하지 않을 때를 찾아내어 그 값에 -1을 해주었다. 먼저 피인용수를 정렬한 뒤에, 피인용수보다 논문수가 많아지거나 같아지는 지점을 찾았다. 하지만 이렇게 짜면 문제점이 발생하는데 {22,42}와 같이 전부 만족하는 경우이다. 이 경우 가장 작은 피인용수가 논문 전체 수보다 큰 경우 이므로 이 때는 논문 수를 넣어주면 된다.

정렬을 사용하였으므로 최종 시간복잡도는 \(O(nlogn)\)이다.

테스트



실은 이 문제를 풀기전에 두 문제 정도 했었는데, 2시간 안에 둘다 풀지 못했다. 그리디는 나름 자신있다고 생각했는데, 새삼 겸손해진다. 나머지 레벨2 문제를 풀어보고 다시 도전해봐야겠다.