본문 바로가기
알고리즘/알고리즘 문제풀이

H-Index 구하기 문제

by sh119 2025. 4. 23.

1️⃣ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=java

 

프로그래머스

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

programmers.co.kr

 

 

 2️⃣ 풀이

import java.util.*;
class Solution {
    public int solution(int[] citations) {
        
        int n = citations.length;
        
        // 배열 오름차순 정렬
        Arrays.sort(citations);
        
        // 작은 논문인용수 부터 검사
        for(int i = 0; i < n; i++){
            int h = n - i; // h = 현재 논문보다 인용수가 많은 논문 개수
            if(citations[i] >= h) return h;
        }
        
        return 0;
    }
}

 

처음에 인용수가 많은 것 부터 접근을 했지만, 오히려 코드의 직관적인 이해가 어려워서 작은 논문 인용수부터 검사하는 것으로 수정했다.

 

만약, 인용수가 많은 것 부터 접근을 하려면

h = i + 1

catations[n-1-i] < h 를 구하여서 

조건을 만족시키지 못하는 순간을 찾아

return h - 1; 을 해준다 물론 모두 만족한다면 n이 최대 h 일 것이다. 

 

h-index 문제를 풀며 O(nlogn)의 성능을 찾아내기위해 이렇게 접근한 것은 괜찮다고 생각했지만,

검사하는 로직을 짤 때 버벅인 부분이 있어서 조금 더 연습이 필요할 것 같다고 느꼈다.