본문 바로가기
프론트엔드로 가는 길/프로그래머스

60. H-Index

by woody-j 2023. 9. 17.

 

https://school.programmers.co.kr/learn/courses/30/lessons/42747?itm_content=course14743 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명
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회 이하입니다.

 

[ 첫번째 문제 풀이 ] -> 문제생김

function solution(citations) {
  let count = 0;

     let countByItems = {};
  citations.sort((a, b) => a - b);
  //1. h번을 순차적으로 h번이상 인용된 논문 수 구하기
  citations.forEach((items,index) => {
    citations.forEach((item) => {
      if (index <= item) {
        ++count;
      } 
    });
    countByItems[index] = count; 
    count = 0;
  });

const filteredArr =[] ;

for ( key in countByItems) {
  const value = countByItems[key];
  if (key == value) {
    filteredArr.push(key)
  }
    
}

  //4. newArr 첫번째 값 반환
  return Number(filteredArr[0]);
}

아마 [0,0,0]의 경우 null나 와서 그런듯

 

정렬된 배열 [0, 0, 0]의 모든 요소는 0이므로 인용된 횟수도 항상 0으로 계산됨

그 결과, countByItems 객체에는 모든 키에 대한 값이 0으로 설정되고, 

filteredArr도 비어 있는 상태가 되어 첫 번째 값을 반환할 때 null이 반환됨

 

다시 생각해보자 

 

[두번째 문제 풀이]

function solution(citations) {
  let count = 0;
  let countByItems = {};
  citations.sort((a, b) => b - a);
  //1. h번을 순차적으로 h번이상 인용된 논문 수 구하기
  citations.forEach((citation, index) => {
    if (citation >= index + 1) {
      count++;
    }
    countByItems[index + 1] = count;
  });
  console.log(countByItems);
  // 2. 최대 h 찾기
  let h = 0;
  for (let i = 1; i <= citations.length; i++) {
    if (countByItems[i] >= i) {
      h = i;
    }
  }

  return h;
}

 

일단 오름차순 말고 내림차순으로 

citations.sort((a, b) => b - a);

왜? 

이 때, H번 이상 인용된 논문들을 내림차순으로 정렬하면, H번 이상 인용된 논문들이 앞쪽에 위치함

내림차순으로 정렬된 논문에서 H번 이상 인용된 논문이 H편 이상이 되는 첫 번째 H 값을 찾으면,

 그 값이 Hirsch 지수가 된다. 이렇게 정렬하면 H-Index를 더 쉽게 계산할 수 있음


for in 반복문은 객체에 주로 사용합니다.

https://velog.io/@hoon_dev/JavaScript-for-in-for-of-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

'프론트엔드로 가는 길 > 프로그래머스' 카테고리의 다른 글

Hash : 의상  (1) 2023.11.22
61. 여행경로  (0) 2023.09.17
59. k진수에서 소수 개수 구하기 - 2022 KAKAO BLIND RECRUITMENT  (0) 2023.09.14
58. 체육복  (0) 2023.09.14
57. 문자열 다루기 기본  (0) 2023.09.12