알고리즘

프로그래머스 알고리즘 문제풀이: H-index

양찬우 2021. 11. 6. 18:27
728x90

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

  • 프로그래머스 정렬 level 2
  • H-index 위키백과 설명
  • 과학자의 생산성 및 영향력을 나타내는 지표인 H-index를 계산하는 문제이다.
  • 어떤 과학자가 발표한 논문 중, H번 이상 인용된 논문이 H편 이상이고 나머지 논문이 모두 H번 이하 인용되었다면, 이때H의 최댓값이 H-index다.
  • 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 주어질 때, 이 과학자의 H-index를 계산하시오.

풀이

  • numeric 배열에서 H 이상인 값의 개수를 셌을 때, 최댓값인 고르는 문제이다.
  • 즉,
    1. 주어진 배열을 오름차순 정렬했을 때
    2. 특정 index의 value가 정렬된 배열에서 해당 index 부터 배열의 마지막까지의 길이보다 크고,
    3. 위의 두 조건을 충족하면서 가장 작은 index (제일 먼저 등장한 h-index)라면,
    4. 해당 index부터 배열의 마지막까지의 길이가 H-index의 최댓값이다.

예시 코드

Javascript

  • 파이썬과 동일한 로직이지만, JS의 sort()는 아스키코드 기준 비교라서 numeric array를 그냥 sort()하면 1,10,11,2,3, ...처럼 숫자 크기로 정렬되지 않는다.
function solution(citations) {
  var answer = 0;
    // 숫자를 오름차순으로 정렬하는 정렬규칙을 추가한다. 
  citations = citations.sort(function (a, b) { 
    return a - b;
  });
  for (let idx = 0; idx < citations.length + 1; idx++) {
    if (citations[idx] >= citations.slice(idx).length) {
      answer = citations.slice(idx).length;
      break;
    }
  }
  return answer;
}

Python

def solution(citations):
    answer = 0
    citations = sorted(citations)  # 파이썬의 sorted는 디폴트가 오름차순 정렬이다. 
    for idx, paper in enumerate(citations):
        if paper >= len(citations[idx:]):
            answer = len(citations[idx:])
            break

    return answer
728x90