Python/Python 문제
H-Index
서영환
2024. 6. 26. 11:13
- 문제 설명
- 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회 이하입니다.
- 입출력 예
- 풀이과정
- 해당 문제를 접했을 때 단순히 수의 평균을 구하는게 아닌가 라는 생각을 가지고 코드작성
- 간단히 전체 배열의 수들을 합하고 이후 배열의 길이로 나눈 값을 구하면 입출력 예에서 나오는 것들로는 통과가 되나 이후 다른 케이스트들에서 실패
- 문제 에 있는 H-Index에 위키백과(https://en.wikipedia.org/wiki/H-index)를 통하여 단순히 평균값을 가지고 오는게 아님을 확인
- h-index (f) = max{𝑖∈𝑁:𝑓(𝑖)≥𝑖}
- 가장 큰수 만큼 반복
- i >= e[i] 되는 i를 찾을 것
- 위 공식을 해석하여 코드를 작성
- 가장 큰수 만큼 반복이긴 하나 최대는 배열 크기만큼 해야 한다
- 위의 조건을 어기게 될 경우 list index error를 볼 수 있다
- 또한 만약 citations의 최대 값이 0일 경우 인용한 논문이 없으므로 0을 반환하고 배열의 크기가 5인 데 안의 내용이 5 보다 클경우 5를 리턴 하여 하여 한다
def solution(citations):
answer = 0
citations.sort(reverse=True)
if citations[0] == 0 : return 0
for i in range(citations[0]):
if i < len(citations) :
if i >= citations[i] :
answer = i
break
else:
break
if answer == 0 : answer = len(citations)
return answer