코딩 연습/Python
H-Index
썬2
2021. 9. 25. 12:06
https://programmers.co.kr/learn/courses/30/lessons/42747?language=python3
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
나의 답:
def solution(cite):
answer = 0
cite.sort(reverse=True) # 역순으로 정렬 하기
for h in range(cite[0], 0, -1): # 최댓값 부터 계산
if (len(cite) >= h) and (cite[h-1] >= h): # 인용수 조건 만족 여부 판단
answer = h
break
return answer
베스트 답안:
def solution(citations):
citations.sort(reverse=True)
answer = max(map(min, enumerate(citations, start=1)))
return answer
- enumerate(start)를 이용해서 현재 자신보다 큰 수가 몇개 있는지 판단한다.
-
citations = [6, 5, 3, 3, 1, 0] for i in enumerate(citations, start=1): print('i',i, min(i)) # i (1, 6) 1 # i (2, 5) 2 # i (3, 3) 3 # i (4, 3) 3 # i (5, 1) 1 # i (6, 0) 0
- enumerate로 (index, value)형태로 묶는다. 그리고 최댓값(start = 1)부터 각 value에 대해 최솟값 value의 값을 min으로 추출하고, 이 추출된 값은 enumerate가 끝나는 citations 리스트의 크기에 해당하는 갯수가 나온다. 이들을 map으로 묶으면, 한 value의 입장에서 보는 최솟값 value의 집합이 나온다. 즉 h값들의 집합이나온다. h값중 최대값을 max로 뽑아서 출력하면 된다.