[문제]
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회 이하입니다.
[풀이]
def solution(citations):
answer = 0
citations.sort(reverse=True)
for i in range(len(citations)):
if (citations[i] < i+1):
return i
return len(citations)
citations.sort(reverse=True)
먼저 인용 횟수를 내림차순으로 정렬한다.
여기서 예시를 하나 들자면 내리차순 정렬까지 한 [91, 60, 20, 5, 4, 3, 2, 1, 0] 이 있다고 가정한다.
for i in range(len(citations)):
if (citations[i] < i+1):
return i
이 반복문에서는 논문의 인용 횟수가 논문의 순서보다 많은 지를 확인한다.
처음에 i가 0으로 들어온다면
citations[0]은 91일 것이고, i+1은 1이 될 것이다. 따라서 논문의 순서와 인용 횟수가 비교가 된다.
아래처럼 반복문이 흘러간다.
논문 1 : 91번 인용됨 (91 >= 1)
논문 2 : 60번 인용됨 (60 >= 2)
논문 3 : 20번 인용됨 (20 >= 3)
논문 4 : 5번 인용됨 (5 >= 4)
논문 5 : 4번 인용됨 (4 >= 5 가 성립이 안된다.)
5번째 논문부터 4번 인용이어서 H-index인 H개의 논문이 H번 이상 인용을 만족 못 시킨다.
따라서 논문 5에서 if문에 걸리게 되고 i를 리턴하게 된다. 따라서 i는 4이고 H-Index는 4가 된다.
return len(citations)
만약 반복문을 돌면서 if문에 걸리지 않는 경우가 있다.
예를 들어서 [5,5,5]이다.
논문 1 : 5번 인용됨 (5 >= 1)
논문 2 : 5번 인용됨 (5 >= 2)
논문 3 : 5번 인용됨 (5 >= 3)
여기서 논문은 총 3회 냈고 모두 5번 인용되었다. 그렇지만 H-index는 H개의 논문이 H번 이상 인용이기 때문에
3개의 논문이 3번 이상 인용을 충족하므로 H-index는 3이 된다. 하지만 위 반복문에서는 조건을 만족하지 않아서 아무것도 출력되지 않는다. 이럴 때를 위해서 마지막에 return len(citations)를 써주는 것이다.
위 반복문에서 걸리지 않았다는 것은 인용 횟수는 모두 만족했기 때문에 길이를 반환하면 H-index가 된다.
'⚙️ Algorithm' 카테고리의 다른 글
[파이썬/알고리즘] 프로그래머스 - 프로세스 (큐) (0) | 2024.07.09 |
---|---|
[파이썬/알고리즘] 프로그래머스 - 가장 큰 수 (정렬) (1) | 2024.07.08 |
[파이썬/알고리즘] 프로그래머스 - 모의고사 (완전탐색) (0) | 2024.07.07 |