프로그래머스 Level 2 | H-Index | Python 풀이

tomkitcount·2025년 9월 2일

알고리즘

목록 보기
167/304

난이도 : level 2
유형 : 정렬
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/42747


문제 파악

이 문제에선 citations, 즉 인용 횟수를 담은 배열을 입력받는다.
배열의 길이는 과학자가 발표한 논문의 수이며, 배열의 각 요소는 논문별 인용 횟수이다.

예를 들어 citations = [3, 0, 6, 1, 5] 라면,
과학자가 총 5편의 논문을 발표했고 각각 3번, 0번, 6번, 1번, 5번 인용되었음을 의미한다.

여기서 우리가 구해야 할 값은 H-index다.
H-index는 논문의 생산성과 영향력을 동시에 보여주는 지표다.


H-index란?

위 배열에서의 H-index는 3이다.
왜 3인지 역으로 들어가보자.

먼저 편하게 비교하기 위해 오름차순 정렬을 해준다.
[0, 1, 3, 5, 6]

이 배열의 H-index가 3인 이유는 다음과 같다:

  • 논문 5편 중 3번 이상 인용된 논문이 3편 이상 존재한다.
  • 나머지 논문은 3번 이하 인용되었다.
  • 이 조건을 만족하는 최댓값이 바로 H-index다.

만약 H-index가 4라고 가정해보자.
그렇다면 4번 이상 인용된 논문이 4편 이상 있어야 한다.
하지만 배열을 보면 4번 이상 인용된 논문은 2편(5, 6)뿐이다.
따라서 H-index = 4는 성립하지 않는다.

즉, 이 케이스의 H-index는 3이다.


문제 접근

H-index를 구하는 방법은 간단하다.

  1. H-index 후보를 0부터 하나씩 증가시켜본다.
  2. 해당 값이 조건(num번 이상 인용된 논문이 num편 이상)을 만족하는지 검사한다.
  3. 조건을 만족하는 최댓값을 H-index로 정한다.

단, 배열의 길이와 값의 범위가 크기 때문에,
오름차순 정렬 후 순회하며 조건을 만족하는 최대 H-index를 갱신하는 방식으로 풀면 된다.


풀이 및 해답

def solution(citations):
    # 1. 오름차순 정렬
    sorted_citations = sorted(citations)
    n = len(sorted_citations)

    # 2. H-index 조건을 만족하는지 확인하는 함수
    def is_Hindex(num):
        count = 0
        for c in sorted_citations:
            if c >= num:      # num번 이상 인용된 논문이면 카운트
                count += 1
        if count >= num:
          	return True
        else:
            return False

    # 3. H-index 후보를 0부터 n까지 전부 검사
    h = 0
    for candidate in range(n + 1):
        if is_Hindex(candidate):
            h = candidate  # 조건 만족하면 갱신

    return h
profile
To make it count

0개의 댓글