프로그래머스의 코딩테스트 고득점 Kit의 정렬유형 문제들 중 Level 2 ‘H-Index’를 풀어보았습니다.

프로그래머스 - ‘H-Index’ 문제 보러 가기 !
https://programmers.co.kr/learn/courses/30/lessons/42747

문제 설명

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회 이하입니다.

입출력 예

문제 접근 방식

이 문제는 오래되어서 기억이 나진 않았지만 예전에 풀었던 문제이다. 그럼에도 불구하고,,
나에겐 고려해야 할 사항이 많았던 어려운 문제였다..

최대 h의 값을 구해야 하므로, 일단 역으로 정렬을 한 후, 큰 수부터 비교해 내려간다.
논문의 갯수를 result로 하고 for문을 돌 때마다 1씩 추가해준다. 이때 만약 논문의 인용횟수보다 논문의 갯수가 커지는 순간,
바로 전(result-1)의 논문의 갯수일 때의 h가 최댓값이므로 바로 전(result-1)의 논문의 갯수를 리턴한다.

풀이 코드

def solution(citations):
    citations = sorted(citations, reverse=True)
    result = 0
    for v in citations:
        result += 1
        if v < result:
            result-=1
            break
        
    return result

댓글남기기