H-Index
라는 것이다.citations
를 내림차순으로 정렬한 뒤 피 인용수가 논문의 수랑 같아지는 지점을 answer
에 담아주면 끝!def solution(citations):
answer = 0
citations.sort(reverse = True) # 내림차순으로 정렬
for num, citation in enumerate(citations):
# 피 인용수가 논문의 수랑 같아지는 지점(num은 0부터 시작하니까 +1)
if citation >= num+1:
h_index = num+1
answer = h_index
return answer
enumerate
를 사용하여 인덱스 번호 num
과 피 인용수 citation
을 받아주고, 피 인용수 citation
이 논문의 수 num+1
(주석에도 적혀있다시피 num
은 0부터 시작하니까 +1
을 해줘야 함)이랑 같아지는 지점이 h_index
가 된다.
사실 answer = num+1
이라고 바로 해도 무관한데, h_index
라는 변수를 줘서 좀 코드를 수월하게 이해하고 싶었다.
문제 이해하는데는 오래걸렸지만 막상 짜보니까 별거 아닌 코드..
def solution(citations):
citations.sort(reverse=True)
answer = max(map(min, enumerate(citations, start=1)))
return answer
난 이 코드가 더 이해하기 힘든데..
제일 안쪽부터 분석해 나가보자.
citations = [3, 0, 3, 6, 1, 5] citations = sorted(citations, reverse=True) # 내림차순 정렬 print(list(enumerate(citations, start = 1)))
<출력> [(1, 6), (2, 5), (3, 3), (4, 3), (5, 1), (6, 0)]
enumerate
를 통해 1부터 시작하는key
,value
형으로 변환한다.
(a, b)
: (인덱스 1부터 커지는 중, 그 인덱스의 논문 인용 횟수)print(list(map(min, enumerate(citations, start = 1))))
<출력> [1, 2, 3, 3, 1, 0]
그렇게 교차하는 지점을 확인하기 위해서
min
함수로 큰 값들을 없애준다. (피 인용수와 논문의 수가 같아지는 지점을 이렇게 찾은듯 하다.)print(max(map(min, enumerate(citations, start = 1))))
<출력> 3
그 중에서 가장 큰 값이 정답이 된다. 위에 나왔던 표 처럼 피 인용수와 논문의 수가 같아지는 지점에서 그 최댓값을 찾아주는 것이다.
이런식인듯 하다.. 미천한 내 머리로 감히 해석을 하려 들어서 지금 머리가 터질 것 같음.
도대체 이런 문제를 보고 저렇게 코드를 어떻게 짜는지 정말 궁금하다🤔
문제 이해능력이 어마무시하구나..