프로그래밍/Algorithm

프로그래머스 H-index 다시!

모지사바하 2024. 3. 20. 13:52

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations 매개변수로 주어질 , 과학자의 H-Index return 하도록 solution 함수를 작성해주세요.

 

 

두번째 풀어보는건데 3년전에 풀어봤던 문제인지라 기억에 전혀 남아있지 않았고 문제를 이해하는데까지 좀 시간이 필요했다.

 

우선 H-Index 는 파라미터로 주어지는 인용횟수 배열의 최댓값부터 최솟값 중 하나가 될 수 있다.

 

예를들어 [5,5,5,5] 인 경우

 

1. 인용횟수 5 이상인 논문이 총 4편 밖에 없으므로 5는 아니다.

2. 인용횟수 4 이상인 논문이 총 4편 있으므로 문제의 조건을 만족하여 정답은 4가 된다.

 

 

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

 

1. 논문 인용수 배열을 오름차순으로 정렬한다.

2. 논문 인용수 배열의 길이만큼 순회하면서 현재 논문의 인용횟수가 아직 순회하지 않은 논문의 수보다 크거나 같다면

해당 논문은 남아있는 논문의수 편 이상이 보장된다. 즉, h번(citations[i]) 이상 인용된 논문이 h편 이상(l-i) 이 되므로 조건을 만족한다.

이 조건이 가능한 이유는 배열이 정렬돼 있으므로 이후 나오는 모든 논문은 현재 논문(citations[i]) 보다 크거나 같음이 보장되기 때문이다.