본문 바로가기

알고리즘

프로그래머스 -정렬 - H-Index

😒문제


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

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

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

입출력 예

citationsreturn
[3, 0, 6, 1, 5]3

👀제약조건


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

입출력 예 설명

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

※ 공지 - 2019년 2월 28일 테스트 케이스가 추가되었습니다.

✔접근방법


H-Index의 정의에 따라 H의 최대값은 citations 의 최대값 부터 시작 될 수 밖에 없다.

따라서 H의 값이 가장 큰 값부터 -1씩 for문을 돌면서 조건에 맞는 h 값을 찾아 바로 리턴한다.

각 논문 인용 횟수를 h 값과 비교하여, h 이상이면 카운팅하고

카운팅 값이 h와 동일해지면 리턴한다.

h값 보다 작으면 h번 이상 인용된 논문이 아니기 때문.

🤔풀이


def solution(citations):
    
    for h in range(max(citations),0,-1):
        over_h = 0
        
        for citation in citations: # 리스트의 논문 인용 횟수를 탐색
            if citation >= h:      #인용 횟수가 h 보다 크면 
                over_h+=1           #카운팅
            if over_h == h:         # 인용횟수 논문의 수가 h이면
                return h            #h리턴
            
    return 0

...


n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용

[4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6] 이라는 리스트가 있을때,

우선 “h번 이상 인용된 논문이 h편 이상” 에 부합하는 경우를 찾아보면

  1. 4회 이상 인용된 논문이 4개 이상 (15개),
  1. 5회 이상 인용된 논문이 5개 이상 (11개),
  1. 6회 이상 인용된 논문이 6개 이상이다 (6개).

“나머지 논문이 h번 이하 인용되었다면” 이라는 조건까지 따져보면,

  1. 4회 이상 인용된 논문이 4개 이상, 하지만 나머지 논문 중에 4번 초과 인용된 논문이 존재함. (5, 6)
  1. 5회 이상 인용된 논문이 5개 이상, 하지만 나머지 논문 중에 5번 초과 인용된 논문이 존재함. (6)
  1. 6회 이상 인용된 논문이 6개 이상, 또한 나머지 논문은 전부 6회 이하 인용 (4, 5)

따라서 문제의 조건에 완벽히 부합하는 H-INDEX는 6

→ 결론은 h번 이상 인용된 논문이 h편 이상이되는, h의 최대값