[프로그래머스] H-Index

mandarinduk·2021년 3월 26일
0

프로그래머스 정렬 Level 2 - H-Index

내가 푼 방법

function solution(citations) {
    let answer = 0;
    
    for (let i = 0; i <= citations.length; i++) {
      const count = citations.filter(citation => citation >= i).length;
      if (count === i) answer = count;
      if (i > count) {
        answer = i - 1;
        break;
      };
    }
    
    return answer;
}
  • 문제에서 말하는 H-Index를 이해하는게 제일 어려웠다...☠️
  • count 횟수만큼 인용된 논문이 몇 편(i) 있는지 찾는 방향으로 구현했다
  • count는 인용된 횟수(citation)가 i 보다 큰 조건을 만족하는 수를 할당
  • i 편과 횟수(count)가 같을 경우 count를 answer에 할당하여 return!
  • i와 count가 같은 경우가 없을 경우 i 편이 횟수(count) 보다 커지기 직전의 i 값이 최대 횟수(count)이기 때문에 i를 answer에 할당하여 return!
    (ex. 4번(count) 이상 인용된 논문이 3편(i), 3번(count) 이상 인용된 논문이 4편(i)일 경우 H-Index는 3)

다른 사람의 풀이

function solution(citations) {
     citations = citations.sort(sorting);
     var i = 0;
     while(i + 1 <= citations[i]){
         i++;
     }
     return i;


     function sorting(a, b){
         return b - a;
     }
}
  • 내림차순으로 citation을 정렬
  • i에 +1을 해주는 이유는 0 편의 논문은 의미가 없기 때문에 1 편의 논문부터 시작
  • 배열의 인덱스는 0부터 시작이기 때문에 그냥 i를 index로 사용
  • 3편의 논문이 3번 이상 인용이 됐다면 H-Index는 3!!
  • i + 1 편의 논문이 정렬한 citations 배열의 i 번째 보다 크다면 H-Index는 i가 된다
  • 결국 i + 1편보다 큰 citations의 요소 중 가장 큰 index를 구하면 된다
  • 만약 i가 4라면 5(i + 1)편의 논문이 배열의 5번째 값(citations[4])보다 크다는 의미는
    5편의 논문이 5번 이상 인용되지 않았다(즉, 4번 이하)이기 때문에, H-Index가 될 수 없다!!
profile
front-end 신입 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN