ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스]H-index📜
    파이썬/알고리즘 공부 2021. 11. 4. 01:06
    728x90

    H-index

    ❓문제 설명

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

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

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


    ➰제한사항

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

    ➰입출력 예

    citations return
    [3, 0, 1, 6, 5] 3

    ➰입출력 예 설명

    이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.

    참고자료 https://en.wikipedia.org/wiki/H-index "위키백과" ↩

    ➰문제 접근방식

    위에 있는 참고자료는 영어로 되어있고 읽기 싫게 생겨서 h-index가 무엇인지 알아보던 중 쉽게 우리가 구하고자 할 때 필요한 개념만 담긴 블로그를 찾을 수 있었다

    https://www.ibric.org/myboard/read.php?Board=news&id=270333

    일단 코드로 풀어보기 전 h-index가 무엇인지에 대해서 알고 가보자~

    H-index란?

    H-지수는 특정 연구원의 연구 성과를 평가하기 위한 지표로써, 발표한 논문수와 피인용수를 이용하여 보다 객관적으로 학문적 역량을 측정할 수 있습니다. H-지수는 개인뿐만 아니라 연구단체, 기관 또는 국가의 연구 성과를 측정하는 데에도 활용되고 있습니다.

    H-지수 구하는 방법

    나의 h는 어떻게 구할 수 있을까? 우측의 표와 같이 자신이 저널에 등재한 전체 논문중 많이 인용된 순으로 정렬한 후(내림차순 정렬함수에 reverse=True 사용해보면 어떨까?라는 추측가능), 피인용수가 논문수와 같아지거나 피인용수가 논문수보다 작아지기 시작하는 숫자가 바로 나의 h가 됩니다. 이 표에서는 10이 H-지수가 되는 것입니다. 다시 말하여, 이 연구원은 논문 인용횟수가 10이 넘는 논문이 적어도 10편이 된다는 것을 의미합니다.

    그림 예시

    피인용수(# of Citation) 논문 수(No.)
    47 1
    42 2
    32 3
    28 4
    24 5
    22 6
    17 7
    15 8
    10 9
    10 10
    8 11

    위에 참고자료와 그림을 보면 어느정도 아 이게 h-index구나라는 감은 잡을 수 있을것이다. 개념만 이해하면 코드 구성에는 크게 어려움이 없을 거 같다. 만약에 피인용수가 논문 수 보다 끝까지 작지 않다면 피인용수의 len()값을 반환해 주면 되지 않을까? 라는 형식으로 접근을 해 줄 수 있을 거 같다.

    💢코드

    def solution(citations):
        # 위에 h지수 구하는 방법에서 접근했던 방식
        citations.sort(reverse=True)
        for idx , citation in enumerate(citations):
            #인덱스가 피인용수보다 클 경우
            if idx >= citation:
                #그 인덱스 반환
                return idx
        #계속해서 피인용수가 인덱스 보다 클 경우 모두가 h-index이므로 citations의 길이를 반환
        return len(citations)
    
    citations = [3, 0, 6, 1, 5 ]
    print(solution(citations))

    댓글

Designed by Tistory.