[프로그래머스/Lv2] H-Index

2022. 10. 27. 11:28

문제

H-Index는 과학자의 생산성과 영향력을 나타내는 지표이다.

어떤 과학자의 H-Index를 나타내는 값인 h를 구하려고 한다.

 

H-Index는 다음과 같이 구한다.

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

 

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 반환하는 함수를 만들어야 한다.

 

 

제한사항

1. 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하이다.

2. 논문별 인용 횟수는 0회 이상 10,000회 이하이다.

 

 

코드

def solution(citations):
    for i in range(1, len(citations)+1):
        if i > sorted(citations, reverse=True)[i-1]:
            return i-1
    
    return len(citations)

 

 

설명

의도적으로 문제를 복잡하게 하려고 했는지는 모르겠지만

프로그래머스에서 설명한 H-Index를 구하는 방법이 굉장히 이상하게 적혀있다.

개인적으로는 문제에서 설명한 H-Index를 구하는 방법은 무시하고 구글에 H-Index 구하는 법을 검색해서

이해하는 편이 훨씬 낫다고 생각한다.

 

H-Index를 구하는 방법을 다시 설명하자면,

citations index
6 1
5 2
3 3
1 4
0 5

위 표와 같이 우선 citations를 내림차순으로 정렬한 뒤 index와 비교한다.

citations의 원소가 index의 원소보다 작아지는 순간, 그 앞 인덱스가 H-Index가 된다.

 

우리는 H-Index가 무엇인지가 중요한게 아니라

H-Index를 찾는 코드를 짜는게 중요하기 때문에 H-Index에 관한 정보는 링크를 첨부한다.

 

아래부터는 코드에 대한 설명이다.

 

for i in range(1, len(citations)+1):

1부터 citations 배열의 길이+1 까지 숫자들(index)을 꺼내면서 반복한다.

 

if i > sorted(citations, reverse=True)[i-1]:
	return i-1

내림차순으로 정렬한 citations의 배열의 i-1번째 원소와 i를 비교한다.

이 때 위 if문의 조건을 만족하면 i-1(H-Index)을 반환한다.

 

return len(citations)

위 if문의 조건을 만족하는 값이 없다면 citations의 길이를 반환한다.

ex) [100, 100, 100] -> 3,      [0] -> 1

 

BELATED ARTICLES

more