[프로그래머스]H-Index-정렬
SW개발/코딩테스트

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

문제 설명

 

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

 

코드 설명

먼저 citations 리스트를 정렬을 해줌으로써 인용된 횟수를 오름차순으로 정렬합니다. 그 후 citations 리스트의 길이만큼 반복문을 수행하고 만약 논문에 인용된 횟수가 논문의 수 - i 라면 논문의수 - i 를 return 합니다. 만족하지 못한다면 0을 리턴하여 줍니다.

 

Point : 오름차순 정렬을 통하여 가장 적은 인용 횟수를 맨 앞으로 배치하여 줍니다. 이를 통하여 불필요한 반복문을 없앨 수 있습니다.

이 문제에서 가장 중요한 점은 h index 에 대한 이해입니다. 아래의 예시를 보며 설명하겠습니다.

citations = [1, 18, 19, 21] 로 입력이 주어질 경우 h-index는 3이 됩니다. 논문의 인용된 횟수를 h index로 지정하는 것이 아닌, 3회 이상 인용된 논문이 3개 존재하므로 h-index 는 1이 아닌 3이 됩니다. 즉, citations 리스트의 길이에서 i 만큼을 뺀 값을 리턴하여야 한다는 뜻입니다. 다른 예시도 한번 살펴보겠습니다.

citations = [1, 2, 5, 23, 33, 35] 로 입력이 주어질 경우 h-index는 4가 됩니다. 반복문을 돌아가면서 수행하다 보면 i = 2 에서 if 조건문을 만족하게 됩니다. (citations[2]=5 >= 6-2) 따라서 6-2 = 4를 리턴하게 됩니다.  

728x90