정리 노트

프로그래머스 H-Index(Python) 본문

프로그래머스 코딩테스트 연습

프로그래머스 H-Index(Python)

꿈만 꾸는 학부생 2022. 6. 21. 22:53
728x90

https://programmers.co.kr/learn/courses/30/lessons/42747#

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

이 문제는 어렵지는 않지만 H-Index 개념 자체를 이해하는데 너무 많은 시간을 소모했던 문제였다.

H-Index란?

프로그래머스 문제에서는 다음과 같이 설명한다.

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

글로만 설명이 되어있고 테스트 케이스도 한 개만 주어져서 쉽게 이해하기 힘들었다.

직접 예시를 들어보자.

과학자가 발표한 논문의 개수가 5편(n = 5)이고 각 논문이 인용된 횟수들(citations)을 리스트에 담아 표현해보자.

citations = [4, 7, 0, 10, 5]

위 리스트를 보기 좋게 정렬을 시키자.

citations = [10, 7, 5, 4, 0]

 

  • 10번(h) 이상 인용된 논문의 개수는 1편(h1)이다. h > h1
  • 7번(h) 이상 인용된 논문의 개수는 2편(h1)이다. h > h1
  • 5번(h) 이상 인용된 논문의 개수는 3편(h1)이다. h > h1
  • 4번(h) 이상 인용된 논문의 개수는 4편(h1)이다. h <= h1
  • 0번(h) 이상 인용된(한 번이라도 인용된) 논문의 개수는 5편(h1)이다. h <= h1

H-Index 정의에 만족하려면 h <= h1을 만족하는 h의 최대값을 구해야한다. 위의 예시에서는 4가 H-Index가 된다.

구현

H-Index의 정의에 맞춰서 구현을 한 코드는 아래와 같다.

def solution(citations):
    citations.sort(reverse=True)
    paper_cnt = len(citations)
    answer = 0
    for i in range(paper_cnt):
        if citations[i] < i + 1:
            answer = i
            break
    else:
        answer = paper_cnt
    return answer

citations[i] < i + 1을 만족하는 경우가 하나도 없는 경우에 대한 예외 처리를 위해 for-else 문으로 구현했다.

citations = [16, 7, 5]

citations가 위 처럼 주어지면 if문을 만족하는 경우가 하나도 없게 된다. 이런 경우, H-Index 값은 논문의 수와 같기 때문에 else 문에서 H-Index 값을 논문의 수로 설정한다.

728x90