import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
for (int rank=citations.length;rank>0;rank--) {
if (rank<=citations[citations.length-rank]) {
answer=rank;
break;
}
}
return answer;
}
}
이 문제는 정렬 후 나열해보고 풀었다.
// 0 1 3 5 6 인용횟수
// 5 4 3 2 1 rank
// 0 1 1 3 5
// 5 4 3 2 1
// 0 3 3 3 5
// 5 4 3 2 1
rank를 맨 뒤에서부터 확인 했을 때, rank가 인용횟수보다 작거나 같아질 때 rank를 return하면 h-index가 된다.
아래는 스터디 팀원분께서 보내주신 h-index를 쉽게 구하는 방법이다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
Arrays.sort(citations);
int max = 0;
for(int i = citations.length-1; i > -1; i--){
int min = (int)Math.min(citations[i], citations.length - i);
if(max < min) max = min;
}
return max;
}
}
나는 h-index 구하는법을 사용했다면 이 풀이는 정말 알고리즘 풀이를 했다고 볼 수 있다.
citation과 rank를 비교하여 더 작은값을 저장하고, 그 값들 중 가장 큰 값이 h-index이기 때문에 max로 구해줬다.