[프로그래머스|JAVA] H-Index

2025. 6. 4. 17:05💻코딩/💡Programmers

728x90
반응형

[문제 링크]

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


 

 

import java.util.*;
class Solution {
    public int solution(int[] citations) {
        Arrays.sort(citations);
        int answer = 0;
        int len = citations.length;
        
        
        for(int i = 0; i < len; i++){
            if(citations[i] >= len - i) { //나머지 논문(n-h)이 h번 이하 인용 중 최댓값
                answer = len - i;
                break;
            }
        }
        return answer;
    }
}

[접근법]

  1. 배열을 오름차순 정렬 후,
  2. 나머지 논문(n-h)이 h번 이하로 인용한 값 중 최댓 값을 찾아서  반환한다.

 


 

모든 문제가 그렇 듯 이해를 필요로 하는 문제였다.

하지만, 이해가 잘되지 않았다.

 

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

 

 ⬆️  특히, 위의 본문 말이 무슨 말인가 싶었다.

질문하기를 통해 다른 사람들이 댓글에 작성해준 또다른 케이스를 수집하여

생각해보고 시도해보니 이해가 되었다.

 

이 문제의 핵심은 나머지 논문이 h번 이하 인용 되었을 때 최댓값을 구하는 것이다.

n편 중 h번 이상 인용된 논문은 h편 이상이고

그렇다면 나머지 논문은 n-h편이 될 것이며, 이 나머지 논문이 h번 이하 인용되는 경우는 

여러개이다. 그래서 최댓값을 찾으면 되는 것인데

 

이는 전체 논문 수에서 하나씩 줄여나가며

나머지 논문의 인용 수가 발표한 논문 편 수와 같거나 커질 때 해당되는 값으로 조건문에 사용하면 된다.

 

 

📌 말이 잘 이해되지 않을 때는 직접 그려가며 이해하면 더 잘되는 것 같다.

 

 

 

 

728x90
반응형