알고리즘 스터디

[프로그래머스] 정렬 3. H-Index


풀이

n번 이상 인용된 n개의 논문의 최댓값이 H인덱스이기 때문에 정렬을 하고 앞에서부터 인용횟수와 배열에서 남은 논문의 개수를 비교해서 maxH의 값을 업데이트했다.

def solution(citations):
    maxH = 0
    citations.sort()
    
    for i in range(len(citations)):
        if citations[i] <= (len(citations) - i - 1):
            maxH = (len(citations) - i - 1)
        else:
            return maxH
    
    return maxH

그런데 케이스 9번에서 실패가 떴다. 검색해봤는데, [10, 50, 100]의 경우를 생각해보라고 했다. (itholic.github.io/kata-h-index/)

이 경우 H Index는 3인데 내 것은 0을 반환하고 있었다

생각해보면 len(citations) -i -1로 maxH를 갱신하기때문에 줄어드는 구조인데 처음 maxH = 0으로 설정한 것이 문제였다.

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

초기값을 수정하고 변수명도 바꿨다.

성공!!


다른분의 코드

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

진짜 고인물,,

[6, 5, 3, 1, 0]의 경우 이런 프로세스로 구하는 듯 하다.

index citations min
1 6 1
2 5 2
3 3 3 (H-Index)
4 1 1
5 0 0