본문 바로가기
Algorithm

[Programmers] 42747.py H-Index

by roses16 2023. 6. 30.

※ 문제 오류

"나머지 논문이 h회 이하로 인용되어야 한다."라는 조건이 실제 풀이에서는 고려되지 않았다. "h회 이상 인용된 논문이 h개 이상"이라는 전제만 생각해야 풀 수 있다.


def solution(citations):
    answer = 0
    
    citations.sort(reverse=True)

    for index in range(len(citations)):
        if citations[index] >= index + 1:
            answer = index + 1
            
    return answer

내림 차순으로 배열을 정렬하여 인용 횟수는 citations[index]로, 횟수 이하로 인용된 논문의 갯수는 정렬된 배열의 index(+1)로 구해 풀이했다.


다른 사람의 풀이

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

 

내 풀이에서 인용 횟수와, 횟수 이하로 인용된 논문의 갯수를 구하는 방식은 동일하다.

다만 이를 enumerate를 사용하여 (인용 횟수, 논문의 갯수)의 객체로 묶고 map과 min함수를 통해 둘 중 더 작은 값을 골라 배열로 만든다.

 

여기에서 더 작은 값을 골라 묶는 이유가 궁금했는데, 실제로 작은 값만을 고르게 되면 배열 초반에는 인용된 논문갯수, 그리고 중반 이후부터는 인용 횟수가 나타나고 이 값이 역전되는 지점에서 문제의 조건을 만족하면서 값이 가장 큰 수가 나타나게 된다.

 

마지막으로 max를 통해 위 값을 추출한다.

 

다만 시간 복잡도 면에서는 전자의 풀이가 더 빨랐다.


참조