[プログラマー/level 2]H-Index


問題の説明
H-Indexは科学者の生産力と影響力を測定する指標である.ある科学者のh-indexを表すh値を求めたいです.ウィキペディア1によると、H-Indexの計算は以下の通り.
ある科学者が発表したn編の論文の中で、h編以上の論文を引用し、残りの論文がh次以下に引用された場合、hの最高価格はこの科学者のh-indexである.
ある科学者が論文を発表する引用回数の配列参照をパラメータとして与えた場合,その科学者のH−Indexを返すために解関数を記述してください.
せいげんじょうけん
  • 科学者が発表した論文の数は1編以上1000編以下である.
  • 論文の引用回数は0回以上10000回以下である.
  • I/O例
    citationsreturn[3, 0, 6, 1, 5]3
    I/O例説明
    この科学者が発表した論文は5編あり、そのうち3編は3回以上引用された.また、残りの2つの論文は3回以下引用されたので、この科学者のh-indexは3である.
    ※公告-2019年2月28日にテストケースを追加しました.
    ウィキペディア
    💻 に答える
    function solution(citations) {
       var answer = 0;
       let arr = [];
               
       // 논문들 인용된 횟수 순으로 재정렬
       citations.sort((a, b) => {
          return a - b;
       });
               
       // 각 논문의 인용된 횟수와 index비교해서 인용횟수가 더 적거나 같아질 경우 arr배열에 넣어줌.
       citations.forEach((ele, index) => {
          if(ele <= index + 1) {
             arr.push(ele);
          } else {
             arr.push(index + 1);
          }
       })
               
       // arr배열에서 요소의 횟수이상 인용된 논문이 해당 횟수 이상일 때 정답으로 추출.
       arr.forEach(arrEle => {
          let numArr = [];
          citations.forEach(ele => {
             if(ele >= arrEle) {
                numArr.push(ele);
             }
          })   
          if(numArr.length >= arrEle) {
             answer = arrEle;
          }
       })
               
       return answer;
    }
    
    
    // H-index를 처음 들어봐서 이에 대한 파악이 필요했다.
    // 아래 참고 중 첫 번째 참고글인 위키피디아가 도움되었다.
           
    // 레벨 2단계 문제 중에서 처음으로 끝까지 혼자 해결한 문젠데 점수도 높게 나와서 기분좋다...ㅎㅎ....

  • ある研究者のh指数は,彼が書いたすべての論文において,n回以上引用された論文がn編を超えると,両者を同時にnを満たす最大値とする.
    https://en.wikipedia.org/wiki/H-indexを参照

  • h-指数:定期刊行物に掲載されているすべての論文のうち、引用された数の多い順に並べ替えた後、引用された数が論文数に等しいか、引用された数が論文数より小さくなる数字が私のhです.
    https://ko.wikipedia.org/wiki/H_%EC%A7%80%EC%88%98を参照
  • (11点)
    👍🏼 他人を解く
    function solution(citations) {
       let sorted = citations.slice().sort((a,b) => b-a); // citations를 복사해서 내림차순으로 정렬.
       let  i = 0; 
       while(i+1 <= sorted[i]) { // 큰 횟수부터 정렬한 배열을 (i + 1)과 순서대로 비교. // (i + 1)이 배열의 해당 인덱스번째 값보다 작거나 같을 동안 계속 반복.
          i++;
       }
       return i
    }
    // 즉, [6, 5, 3, 1, 0]배열의 요소들을 각각 (i+1)인 1, 2, 3, 4, 5과 비교해서 배열 요소보다 (i+1)가 커질때 i++을 멈추는 것이다.
    // 배열 요소 중 3이 (i+1) 중 3과 같은 순서이다. 이 다음 배열 요소 중 1과 (i+1)의 4가 같은 순서인데, (i+1)이 배열 요소보다 커지는 순간이기 때문에 더 이상 i++이 작동하지 않게 된다.
  • は私の答えとは反対です.
  • 他の人の解答の大部分はすべてドアで书いたのがこんなに短いので、问题の解决の喜びを见て少し...ははは….
  • H-indexの式は参照が多い順からソートして求める.
    💡 リファレンス
  • https://www.ibric.org/myboard/read.php?Board=news&id=270333