Programmers - 정렬 >H-Index

박재현·2021년 6월 16일
0

알고리즘 부수기

목록 보기
2/43
post-thumbnail

내 풀이

  1. citations array를 내림차순으로 sort한다.
  2. 정렬된 citations의 첫번째 인덱스 값(가장 큰 값)을 h에 넣는다.
  3. citations에서 h보다 큰 요소의 개수를 cnt에 넣는다.
  4. cnt >= h인 경우 h를 return 한다.
  5. cnt < h인 경우 h--를 한다.
  6. return h할 때까지 2 ~ 5 과정을 반복한다.
function solution(citations) {
  let cnt = [];
  let h = 0;

  citations.sort((a, b) => b - a);
  h = citations[0];
  while (true) {
    cnt = citations.filter((citation) => h <= citation);
    if (cnt.length >= h) {
      return h;
    }
    h--;
  }
}

모범답안

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;
  }
}

h-index를 찾을 때의 과정이 독특하다.

예를 들어 정렬된 citation이 [47, 22]이라면 while루프를 3번째 돌 때 3 <= citations[3]이 되므로 루프를 빠져나가고 2를 return 한다.

코드는 간단해보이지만 가독성은 떨어지므로 좋은 코드인지는 모르겠다.

얻어갈 부분

테스트케이스에 대한 고민을 체계적으로 할 필요가 있다.

  1. value의 범위를 확인할 것
  2. 0만 있는 testcase 만들 것
  3. 숫자가 매우 클 때의 testcase 만들 것
  4. 매우 작은 숫자와 큰 숫자가 섞여있는 testcase 만들 것
profile
공동의 성장을 추구하는 개발자

0개의 댓글