TODAY TIL

📌 문제 설명

H-Index는 과학자의 생산성과 연구 영향력을 나타내는 지표입니다. 한 과학자의 H-Index h는 다음과 같이 정의됩니다:

  • h번 이상 인용된 논문이 h편 이상
  • 나머지 논문이 h번 이하 인용

즉, hh의 최댓값을 구하는 것이 목표입니다.

제한사항

  1. 논문 수 n: 1 이상 1,000 이하
  2. 논문별 인용 횟수: 0 이상 10,000 이하

💡 문제 이해

논문의 인용 횟수 배열을 분석하여, 위 조건을 만족하는 hh의 최댓값을 구합니다.


🛠️ 풀이 방법

문제를 해결하기 위해 다음과 같은 단계를 거칩니다:

  1. 내림차순 정렬
    • 논문의 인용 횟수를 내림차순으로 정렬합니다.
    • 이렇게 하면 인용 횟수가 높은 논문부터 조건을 확인할 수 있습니다.
  2. H-Index 조건 확인
    • 정렬된 배열에서 i+1번째 논문이 i+1번 이상 인용되었는지 확인합니다.
    • 이 조건을 만족하는 i+1h입니다.
  3. 조건 만족 여부
    • 조건을 만족하지 않는 순간 반복을 멈추고, 이전까지 구한 hh의 최댓값을 반환합니다.

 

📄 Python 코드

def solution(citations):
    # 1. 내림차순 정렬
    citations.sort(reverse=True)
    
    # 2. H-Index 계산
    h_index = 0
    for i, citation in enumerate(citations):
        if citation >= i + 1:  # h 조건 확인
            h_index = i + 1
        else:
            break
    
    # 3. 결과 반환
    return h_index

 

🔍 단계별 풀이

  1. 내림차순 정렬
citations.sort(reverse=True)

 

 

  • 논문의 인용 횟수를 내림차순으로 정렬합니다.
  • 예시 입력: [3, 0, 6, 1, 5]
  • 정렬 결과: [6, 5, 3, 1, 0]

2. H-Index 조건 확인

for i, citation in enumerate(citations):
    if citation >= i + 1:
        h_index = i + 1
    else:
        break

 

 

 

  • 논문 i+1번째의 인용 횟수가 i+1 이상인지 확인합니다.
  • 조건이 만족되지 않으면 반복을 멈춥니다.

3. 최댓값 반환

return h_index

 

 

  • 최종적으로 구한 h 값 중 최댓값을 반환합니다.

 

📊 예제 테스트

예제 1

citations = [3, 0, 6, 1, 5]
print(solution(citations))  # 결과: 3

 

 

  • 정렬: [6, 5, 3, 1, 0]
  • hh 계산:
    • 1번째 논문: 6>=1 → h=1
    • 2번째 논문: 5>=2 → h=2
    • 3번째 논문: 3>=3 → h=3
    • 4번째 논문: 1<4 → 조건 불만족, 종료
  • 최종 결과: h=3

예제 2

citations = [10, 8, 5, 4, 3]
print(solution(citations))  # 결과: 4

 

 

  • 정렬: [10, 8, 5, 4, 3]
  • hh 계산:
    • 1번째 논문: 10>=1 → h=1
    • 2번째 논문: 8>=2 → h=2
    • 3번째 논문: 5>=3 → h=3
    • 4번째 논문: 4>=4 → h=4
    • 5번째 논문: 3<5 → 조건 불만족, 종료
  • 최종 결과: h=4

⏳ 복잡도 분석

  • 시간 복잡도
    • 정렬: O(nlog⁡n)
    • 배열 순회: O(n)
    • 총합: O(nlog⁡n)
  • 공간 복잡도
    • 추가 메모리를 사용하지 않으므로 O(1)

✨ 마무리

H-Index 문제는 간단한 조건 확인과 정렬을 통해 해결할 수 있습니다. 중요한 점은 조건을 만족하는 순간까지 hh를 계산하고 최댓값을 반환하는 것입니다.

이 코드를 통해 데이터 분석 및 알고리즘 설계 능력을 키울 수 있으며, 특히 논문이나 데이터를 분석하는 데 유용한 지표 계산에 활용할 수 있습니다.

코드와 풀이에 대한 질문이 있으면 댓글로 남겨주세요!

+ Recent posts