[ALGORITHM NINJA] 정렬 3번 H-index

4047 단어 algorithmalgorithm

내 코드

function solution(citations) {
  var answer = 0;
  citations.sort((a, b) => {
    return b - a;
  });
  for (let H_index = citations.length; H_index >= 0; H_index--) {
    if (citations[H_index - 1] >= H_index) {
      answer = H_index;
      break;
    }
  }
  return answer;
}

  • 전체로직설명 : 우선 출간한 논문들의 인용횟수가 배열에 담겨서 들어온다.

  • 배열을 역으로 소팅한다. ( 내림차순 )

  • 배열의 방 갯수가 최대 H-index 값이므로 최대 H-index부터 하나씩 값을 줄이며 만족하는 지 체크한다.

H-index의 조건은 어떤수 n 이상의 방이 n개 이상있고, 나머지는 모두 n이하이면 (이 조건을 만족하는 수중 최댓값이라는 가정하에) H-index는 n이다..

ex) [5,5,5,5,5] => 5
ex) [5,5,5,5,4] => 4
ex) [3,0,6,1,5] => 3

  • [3,0,6,1,5]를 손 계산 해보았다.

다른 사람 코드

while(i + 1 <= citations[i]){
         i++;
     }

나와 같은 로직의 코드를 다음과 같이 줄일 수 있다.
citations는 역소팅 되어있는 상황이고 i값을 늘리면서 체크

  • H-index 1일 때 0번방이 1이상인지 확인 (1이상이 최소 1개이므로 H-index 성립)
  • 2일때 1번방이 2이상인지를 확인 (2이상이 최소 2개이므로 H-index 성립)
  • 3일때 2번방이 3이상인지를 확인 (3이상이 최소 세개이므로 H-index 성립)

...

Reference

-프로그래머스

좋은 웹페이지 즐겨찾기