[Programmers / Python / 정렬] - H-Index

Young·2021년 5월 9일

출처 https://programmers.co.kr/learn/courses/30/lessons/42747

알고리즘을 생각하기 힘들다기 보다는 H-index case를 생각하는게 더 어려웠던 문제였다.

처음에는 내림차순 정렬을 시킨 후 i번째 원소의 값이 i+1(i번 이상 인용된 논문의 갯수)보다 같을 때 H-Index이라 생각했다.

def solution(citations):
    citations.sort(reverse=True)
    for i in range(len(citations)):
        if citations[i] == i+1:
            return citations[i]

H-index를 잘못 이해한거 같아 H-index에 대해서 찾아보다가 H-index가 꼭 인용수와 같을 필요는 없다는 것을 알게 되었다.

H-Index
: h번 이상 인용된 논문이 h편 이상, 나머지 논문이 h번 이하를 만족하는 h의 최댓값

def solution(citations):
    citations.sort(reverse=True)
    for i in range(len(citations)):
        if citations[i] <= i+1: 
          if citations[i] == i+1:
            return i+1
          else:
            return i


위와 같이 코드를 수정하였는데 케이스 하나에서 실패가 떴다.
H-index 케이스 예시에 대해 찾아보다가 아래 같은 경우도 있다는 것을 알게되었다.


이런 경우는 H-index가 원소의 갯수인 4이므로 다음과 같이 작성하여 처리해주었다.

def solution(citations):
    citations.sort(reverse=True)
    for i in range(len(citations)):
        if citations[i] <= i+1: 
          if citations[i] == i+1:
            return i+1
          else:
            return i
    return len(citations)

다른 사람의 풀이

def solution(citations):
    citations.sort(reverse=True)
    answer = max(map(min, enumerate(citations, start=1)))
    return answer

정리

enumerate()
iterable을 입력으로 받아 (index 값:원소) tuple을 가진 enumerate 객체를 리턴합니다.

profile
👩🏻‍💻

0개의 댓글