[정렬] H-Index

김아현·2023년 5월 8일
0

코딩테스트

목록 보기
10/26
post-thumbnail

프로그래머스 H-Index 파이썬 풀이

문제설명

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회 이하입니다.

입출력 예

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

입출력 예 설명

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

프로그래머스의 문제 대다수를 읽고 느끼는 거지만 이 문제도 역시나 처음 읽었을 때 문제가 이해되지 않았다. 입출력 예와 설명을 토대로 정리하면, 위 예에서 n=5이고, 3번(citations[0]), 6번(citations[2]), 5번(citations[4]) 논문 3개 3번이상 인용 되었고 0번(citations[1]), 1번(citations[3]) 논문 2개는 3번 이하 인용되었다.

H-index의 개념이 없어서 그런건지, 여러번 읽어보아도 이해할수없어 H-Index의 개념을 더 찾아보았다. H-index 개념과 계산, h-index 앞의 두 블로그에 따르면 H-index는 다음과 같이 계산할 수 있다.

  1. 각 논문들의 인용 횟수를 조사한다
  2. 연구자의 논문을 인용 횟수를 기준으로 내림차순 정렬한다
  3. 인용횟수와 논문의 순서(Index)가 같거나 인용횟수가 더 높은 구간까지의 논문 편수를 구한다

1차 코드는, 위 개념을 다 찾아보진 않고 H-index가 내림차순 정렬한 뒤에 인용횟수와 논문 편수가 일치하는 지점일 때를 리턴한 코드다.

1차 코드

def solution(citations):
    c = sorted(citations, key=lambda x:-x)
    for i in range(len(c)):
        if i+1 == c[i]:
            return i+1 

1차 코드의 문제점 고치기

1차 코드는, 논문 인용 편수와 인덱스가 일치하지 않을 때엔 실패한다. 언제나 편수와 인덱스가 같지 않음을 알아 차리고 계산 공식의 3번을 적용해서 2차 작성 코드에선 인용횟수가 더 높은 구간까지의 논문 편수를 출력해보았다.

2차 코드

#1. 각 논문들의 인용 횟수를 조사한다
#2. 연구자의 논문을 인용 횟수를 기준으로 내림차순 정렬한다 
#3. 인용횟수와 논문의 순서(Index)가 같거나 인용횟수가 더 높은 구간까지의 논문 편수를 구한다

def solution(citations):
    ans = 0
    c = sorted(citations, key=lambda x:-x)
    for i in range(len(c)):
        if i+1 > c[i]:
            break
        else:
            ans = i+1
    return ans
        

TMI

  • H-Index가 뭔지 알고 있다면 쉽게 풀리겠지만 문제 지문만 읽어선 풀기 어려웠다..
profile
멘티를 넘어 멘토가 되는 그날까지 파이팅

0개의 댓글