Algorithm/프로그래머스

[프로그래머스/Python] H-Index - Level2

poppy 2021. 5. 12. 13:42
반응형

programmers.co.kr/learn/courses/30/lessons/42747?language=python3

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

def solution(citations):
    length = len(citations) # 배열의 길이
    
    citations.sort()
    
    for i in range(length):
        if citations[i] >= length - i: return length - i # 논문이 인용된 횟수 >= 인용된 논문의 개수
        
    return 0

먼저 citations 를 오름차순으로 정렬해줍니다. 그 다음 for문을 통해 h의 최대값을 구합니다. 오름차순으로 정렬했기 때문에 i번째 인용된 횟수는 i번째 이전의 인용된 횟수보다 클 수 밖에 없습니다. 그래서 자동적으로 나머지 논문이 h번 이하 인용되는 조건은 만족합니다. h번 이상 인용된 논문이 h편 이상인 h의 최대값을 구해야하는데 h번 이상 인용된 횟수는 citations[i]로 구할 수 있습니다. i번째 이후의 인용된 횟수는 모두 i번째 인용된 횟수보다 크므로 h번 이상 인용된 논문의 개수는 전체 논문의 개수(length) - h번 이상 인용된 횟수의 인덱스(i) 입니다.

 

처음에는 return citations[i] 로 했는데 채점했더니 모두 실패가 떴습니다. 그래서 다시 생각해보니 오름차순으로 정렬했기 때문에 return citations[i] 하면 h의 최소값이 구해지는 것이었습니다. 따라서 h의 최대값을 구하려면 return length - i 을 해주어야 합니다.

 

이 문제는 코드를 짜는 것보다 문제를 이해하는데 오래걸렸던 것 같습니다

반응형