날짜: 2022년 1월 31일 오후 5:51

코드

Algorithm/42747.py at main · Junroot/Algorithm

풀이

발표한 논문의 수가 1000편이하기 때문에, h=1000부터 하나씩 내려오면서 가능한지 확인해도 처리속도가 빠를 것이라고 생각이 들었다.

이 때, h값을 하나씩 줄이면서 전 단계에서 세었던 논문의 개수를 다시 셀 필요가 없을 것으로 보였다. citations를 역순으로 정렬한 뒤, h를 1씩 줄이고 h값을 만족하는 논문의 수가 h값 이상 인 경우에 그 h를 반환하도록 구현했다.

다른 사람의 풀이를 봤는데 너무 충격적이여서 여기에도 남겨본다.

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

역순으로 정렬을 하면 자신의 index + 1이 해당 수보다 많이 인용된 논문의 개수가 된다. 만약 인용의 수만큼의 논문의 개수가 존재하지 않아도 논문의 개수만큼의 h는 가질 수 있게 되기 때문에 min(인용 수, 인덱스 + 1) 을 하게 되고 그 중에서 가장 큰 값이 h가 된다.