프로그래머스 H-Index 자바(java) 풀이
문제 정리
- 어떤 과학자의 H-Index: 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값
- 논문별 인용 횟수는 0회 이상 10,000회 이하이다.
문제 설명
h-index의 정의를 잘 이해하셔야 합니다. 예를들어 {7.8.9.9}가 주어졌다고 합시다.
그러면 여기서 h-index는 몇이 될까요??? 답이 없다고 생각한다면 잘 못 이해하셨습니다.
답은 4 입니다. h값이 인용횟수 안에 있으라는 법은 없습니다.
4번 이상 인용된게 4개 있고 나머지 논문이 4번 이하(0번) 인용되었으므로 최대 h는 4가 맞습니다
문제 풀이
문제 그대로 풀이 하면됩니다. 쉽게 풀이하기 위해서 우선 오름차순으로 정렬합니다.
- 인용횟수 0번 부터 제일 큰 인용횟수(citations[len-1]) 까지 모두 해봅니다
- 인용횟수 h번 보다 큰 인용횟수들을 카운트 합니다(cnt)
- h보다 큰 인용횟수의 개수(cnt)가 h 이상이면 조건을 만족함으로 h는 h-index가 될 수 있습니다. 이때 max 값을 update 해줍니다. 그리고 다음 계산을 위해 cnt를 0으로 초기화합니다.
프로그래머스 h-index 자바 코드
import java.util.*;
class Solution {
public static void main(String[] args) {
int[] citations = {7,7,8,9};
System.out.println(solution(citations));
}
public static int solution(int[] citations) {
int len = citations.length;
Arrays.sort(citations); // 오름차순 정렬
int max = 0;
int cnt = 0;
for(int h=0; h<=citations[len-1]; h++){
// 인용횟수 h보다 큰 인용문의 개수 찾기
for(int j=0; j<len; j++){
if(h <= citations[j])
cnt++;
}
// h보다 큰 인용문의 개수가 h이상이면 max값을 update
if(cnt >= h)
max = max < h ? h : max;
cnt = 0; // cnt 초기화
}
return max;
}
}