[문제 바로가기] https://programmers.co.kr/learn/courses/30/lessons/42747
문제 설명
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회 이하입니다.입출력 예)
citations : [3, 0, 6, 1, 5]
return : 3입출력 예 설명 )
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.
문제의 내용뿐만 아니라 제목자체에도 'index'가 인용되었기 때문에 리스트(List)의 인덱스를 이용하여 문제를 풀었다.
정렬을한 후 답을 도출하려했지만 리스트 내의 값 이동은 시간복잡도를 증가한다고 배웠기 때문에 시간 효율성을 따지고자 새로운 리스트를 만들어 h번 인용된 논문이 몇 개인지를 나타내려 하였다.
최대값을 구하는 문제이기 때문에 리스트의 맨 끝값에서부터 계산을 하였다.
def solution(citations):
answer = 0
candidates = [0] * (max(citations)+1)
for i in citations:
candidates[i] += 1
for j in range(len(candidates)-1, -1, -1):
if sum(candidates[j:]) >= j:
answer = j
break
return answer