프로그래머스 LV2 정복

[프로그래머스 LV2 Python] H-Index

조조링 2024. 10. 18. 14:25
728x90
반응형

 

 


문제

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.

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

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

 

 

제한 사항

  • 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
  • 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.

 


 

접근 방법

이 문제를 풀기 위해서는 우선 "인용된 횟수"와 "논문 개수" 사이의 관계에 집중해야 합니다. 

먼저 논문이 얼마나 인용되었는지를 확인하고, 그 인용 횟수가 상위 몇 개 논문에서 충족되는지를 확인하는 과정이 핵심입니다. 

1. 인용 횟수에 따라 논문을 정렬하여 상위 몇 개의 논문이 해당 인용 횟수를 충족하는지 확인한다.
2. 논문을 차례로 확인하면서 H-Index의 조건에 맞는 최대 값을 찾는다. 

 

 


풀이 순서

1. 논문 이용 횟수 정렬

  • 주어진 논문 인용 리스트(citations)를 내림차순으로 정렬합니다. 
  • 내림차순 정렬을 하면 많이 인용된 논문부터 차례로 확인할 수 있습니다. 

2. H-Index 조건 확인

  • 상위 i+1번째 논문이 i+1번 이상 인용되었는지 확인합니다. 
  • 이때, i+1번째 논문까지의 인용 횟수가 i+1번 이상이라면 H-Index가 될 수 있습니다. 
  • 만약 이 조건이 더 이상 만족되지 않으면, 그 전까지의 i값이 최종 H-Index가 됩니다. 

 


코드 구현

def solution(citations):
    # 1. 인용 횟수를 내림차순으로 정렬
    citations.sort(reverse=True)
    
    # 2. H-Index 계산
    h_index = 0
    for i in range(len(citations)):
        # i+1번째 논문이 i+1번 이상 인용되었는지 확인
        if citations[i] >= i + 1:
            h_index = i + 1
        else:
            break
    
    return h_index

 

코드 예시로 설명

  • 입력: [3,0,6,1,5]
  • 내림차순 정렬: [6,5,3,1,0]
    • i=0인 경우, 6회 인용 >= 첫 번째 논문 ▶︎ H-Index 조건 만족 (h=1 이상 가능)
    • i=1인 경우, 5회 인용 >= 두 번째 논문  ▶︎ H-Index 조건 만족 (h=2 이상 가능)
    • i=2인 경우, 3회 인용 >= 세 번째 논문 ▶︎ H-Index 조건 만족 (h=3 이상 가능)
    • i=3인 경우, 1회 인용 < 네 번째 논문 ▶︎ H-Index 조건 불만족 (h=4 불가능)
  • 따라서, H-Index는 3이 됩니다. 

 

728x90
반응형