H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
citations | return |
---|---|
[3, 0, 6, 1, 5] | 5 |
H-Index의 값이 되려면 두 가지 조건을 만족해야 한다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되어야 한다.
위 조건을 만족하는 값 중 최댓값이어야 한다.
우선 첫 번째 조건을 만족시키는 값을 구해보자. 로직을 짜기 전에, 우선 문제 풀이의 실마리가 되는 법칙을 하나 발견해야 한다. 바로 H-Index는 절대로 과학자가 발표한 전체 논문 개수(=len(citations)
) 보다 클 수 없다는 사실이다. 이렇게 볼 때 H-Index는 반드시 range(len(citations)+1)
범위 안에 있으므로, for loop를 활용해 완전 탐색을 하도록 하자.
def solution(citations):
answer = 0
h_i = []
for i in range(len(citations)+1):
pass
return answer
다음으로, 순회하는 정수 i가 첫 번째 조건을 만족할 때, 객체 h_i
에 추가하는 로직을 짠다. 변수 answer
은 필요 풀이에 사용되지 않으므로 삭제한다.
h_i
에 담긴 정수 중 최댓값이 H-Index에 해당하므로 해당하는 값(h_i[-1]
)을 return
시킨다.
def solution(citations):
h_i = []
for i in range(len(citations)+1):
h_c = 0
for c in citations:
if c >= i: # 논문 인용 횟수 c가 i 이상인 경우 변수 h_c의 값을 증가시킨다.
h_c += 1
if h_c >= i: # 값 h_c가 i 이상이면 h_i에 i값을 추가한다.
h_i.append(i)
return h_i[-1]