[문제 풀이] H-Index

Yehyeok Bang·2023년 11월 15일
1
post-custom-banner

문제

H-Index

설명

H-Index?

Hirsch index, 학술 연구자의 학문적 영향력을 측정하는 지표 중 하나에요. 연구자가 발표한 논문들의 인용 횟수를 기반으로 계산돼요. 간단히 말하면, H-Index는 얼마나 많은 논문이 얼마나 많이 인용되었는지를 나타내는 지표에요. 예를 들어, h-index가 10이라면 해당 연구자의 논문 중 10개 이상이 각각 10번 이상 인용되었다는 의미에요.

첫 번째 풀이

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        Arrays.sort(citations);
        int max = citations[citations.length - 1];
        
        for (int i = max; i > 0; i--) {
            int count = 0;
            for (int n : citations) {
                if (n >= i) {
                    count++;
                }
            }
            
            if (count >= i) {
                return i;
            }
            
            count = 0;
        }
        
        return 0;
    }
}
  • 입력 받은 citations 배열을 먼저 오름차순 정렬해요.
  • citations 배열의 길이를 이용해 인용 횟수의 최댓값을 구해요.
  • 최대 인용 횟수부터 0까지 내려가면서 H-Index를 찾는 방법이에요.
  • 내부 반복문을 사용하여 citations 배열을 순회하면서 각 인용 횟수(n)가 현재의 숫자(i)보다 크거나 같은 경우, count 변수를 증가시키고, 내부 반복문이 끝나면, count 변수와 현재의 숫자(i)를 비교하여 count가 i보다 크거나 같은 경우, 현재의 숫자(i)를 반환해요.

두 번째 풀이

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;
    }
}
  • 입력 받은 citations 배열을 먼저 오름차순 정렬해요.
  • 반복문을 역순으로 실행하여 배열의 끝부터 시작해요.
  • 각 인덱스(i)에 대해서 citations[i]citations.length - i 중 작은 값을 선택하여 최소 인용 횟수(min)를 구해요.
  • max 변수와 최소 인용 횟수(min)를 비교하여 더 큰 값을 max에 저장해요.
  • 반복문이 종료되면 max 값을 반환해요.

정리

  • 두 코드는 모두 H-Index 를 구하는 코드이지만 약간의 차이가 있어요.
  • 반복문의 범위 : 첫 번째 풀이에서는 max부터 0까지 반복문을 실행했지만, 두 번째 풀이에서는 배열의 끝부터 시작하여 역순으로 반복문을 실행해요.
  • 최소 인용 횟수 계산 : 첫 번째 풀이에서는 내부 반복문을 사용하여 각 인용 횟수(n)가 현재의 숫자(i)보다 크거나 같은 경우 count 변수를 증가시키고, 반복문이 끝나면 count와 현재의 숫자(i)를 비교하여 count가 i보다 크거나 같은 경우 현재의 숫자(i)를 반환해요. 하지만 두 번째 풀이에서는 Math.min() 함수를 사용하여 citations[i]와 citations.length - i 중에서 작은 값을 선택하여 최소 인용 횟수(min)를 구해요.
  • 최대 인용 횟수 저장 : 첫 번째 풀이에서는 count 변수와 max 변수를 사용하여 최대 인용 횟수를 저장하고 반환해요. 하지만 두 번째 풀이에서는 max 변수와 min 값을 비교하여 더 큰 값을 max에 저장해요.
  • 이러한 차이로 두 번째 풀이가 더 간단한 코드 형태를 가져요.
  • 어떻게 풀지 감이 잡히지 않는 문제를 풀 때 일단 성능을 무시하고 답을 어떻게 구하는지, 즉 문제를 이해하기 부터 해야할 것 같아요. 이후에 요구하는 성능을 따져보는 것이 더 빠르게 문제를 풀 수 있게 해줄 것 같아요.
profile
부담 없이 질문하고 싶은 개발자가 목표입니다.
post-custom-banner

0개의 댓글