본문 바로가기
Algorithm/Programmers

[고득점 Kit(정렬)] H-Index (Python)

by 원만사 2022. 2. 8.
반응형

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

 

풀이

 일단 입력으로 받은 배열을 내림차순으로 정렬한다. 그 후 인용 횟수로 따졌을 때의 최댓값(citationRes)과 논문의 개수로 따졌을 때의 최댓값(countRes)을 나눠서 최댓값을 구했다.

 

 예를 들어 입력으로 [5, 5, 5, 9]가 주어지면 [9, 5, 5, 5]로 정렬하고 앞에서부터 for문을 통해 현재 논문의 인용 횟수와 지금까지 살펴본 논문의 개수를 카운트한다. for문을 돌면 다음과 같은 순서로 체크한다.

 -> (9, 1) (5, 2) (5, 3) (5, 4)      표기 : (citation, count)

 위의 예제는 인용 횟수로 따졌을 때는 값이 변하지 않는다. 총 논문이 4개 뿐이기 때문에 9(또는 5)번 이상 인용된 논문이 9(또는 5)편 이상이 될 수 없기 때문이다. 하지만 논문의 개수로 따지면 마지막 (5,4)에서 4번 이상 인용된 논문이 4편 이상임을 만족하기 때문에 h-index의 최댓값이 4가 된다는 것을 구할 수 있다.

 

 이와 같이 citationRes와 countRes를 구한 후 둘 중에 가장 큰 값을 return 하면 된다.

 

코드

def solution(citations):
    citationRes = 0 # 인용 횟수로 따졌을 때의 최댓값
    countRes = 0 # 지금까지 살펴본 논문의 개수로 따졌을 때의 최댓값
    citations.sort(reverse=True)

    count = 0 # 현재까지 살펴본 논문의 개수
    for citation in citations:
        count += 1

        # (1)만약 현재 논문의 인용됫 횟수(citation)보다 현재까지 살펴본 논문의 개수(count)가 크거나 같으면
        # citationRes를 갱신
        # (2)만약 현재까지 살펴본 논문의 개수(count)가 현재 논문의 인용된 횟수(citation) 보다 크면
        # countRes를 갱신
        if count >= citation:
            citationRes = citation
        elif citation > count:
            countRes = count

        if citationRes != 0 and countRes != 0:
            break

    return max(citationRes, countRes)
반응형

댓글