프로그래머스 정렬 LV2

고장난 고양이·2022년 1월 12일
0

알고리즘_python

목록 보기
10/84

프로그래머스 정렬 LV2

H-index

문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

제한사항
과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
입출력 예
citations return
[3, 0, 6, 1, 5] 3
입출력 예 설명
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.

이문제는 문제가 젤 어렵다.

과정

시간을 줄여보고자 가운데에서 시작해서 작으면 왼쪽 크면 오른쪽이렇게 구현해볼까하다가 괜히 코드 복잡해지는거같아서 그냥 정렬 후에 첨부터 찾아가는 것으로 했다.

코드

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

먼저 정렬을 하고 앞에서 부터 h를 탐색해나가는 구조이다. 마지막 return 0은 마지막 샘플이 [0]인 경우인듯 그래서 오류가 나는 것으로 추정되어 0으로 반환하는 경우도 넣어주었다.

참고

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

1) min(index,value) 부분은 가능할 수 있는 모든 h-index를 추출하는 부분 2) max(~) 값은 가능할 수 있는 모든 h-index 중 가장 큰 값을 추출하는 부분으로 생각하시면 됩니다. 예를들어 [6, 5, 4, 1, 0]의 경우에선 min~ 부분은 min(1, 6), min(2, 5), min(3, 4), min(4, 1), min(5, 0), 즉 해당 인용수 이상의 논문개수와 해당 논문의 인용수 중 더 작은 숫자를 고르는 작업을 하고(h-index로 가능한 숫자 추출), max~부분은 앞에서 골라진 (1, 2, 3, 1, 0) 중 가장 큰 숫자를 뽑아 실제 h-index를 구하는 방법입니다.
(이거만한 설명없어서 복사) 진짜 천재인듯 ㄸㄸㄸ 세상엔 대단한 사람많다.

profile
개발새발X발일지

0개의 댓글