본문 바로가기
Algorithm/프로그래머스(Programmers)

[ 자바스크립트(JavaScript) ] 프로그래머스 level2 - H-Index

by YWTechIT 2022. 3. 31.
728x90

📍 프로그래머스 2단계 - H-Index

문제 보기


정렬을 사용하여 푸는 문제인데, H-Index라는 정의를 처음에 잘 이해하지 못했다. 여기저기 찾아보다 H-지수가 무엇인지 알려주는 기사를 봤고, 해당 기사를 통해 구현해보니까 정답 판정을 맞았다. (기사 보러 가기) 기사에 작성된 핵심 내용을 토대로 만약, citations = [8, 4, 5, 10, 3]이라고 가정한 후 로직을 작성하면 다음과 같다.

 

  1. 전체 논문 중 많이 인용된 순으로 정렬(내림차순 정렬)
  2. 인용 수(citation[i])와 논문 개수(idx)를 하나씩 비교해나가면서 인용수가 논문수와 같아지거나, 인용수가 논문수보다 작아지기 시작하는 숫자(논문 개수)가 h가 된다.
  3. 결론적으로, 인용 횟수 3번이 넘는 논문의 수가 적어도 4편이 된다는 것을 의미한다.
728x90

여기까지 작성하여 제출하면 7번 테스트케이스가 실패로 처리되는데, edgeCase를 고려하지 않았기 때문이다. 해당 edgeCase반복문을 돌면서 인용수가 논문수와 같거나 작아지지 않는 경우가 있다. 예를 들면 citations = [ 23, 14, 10, 8, 7 ]인 경우인데, 이럴 때는 반복문 안에서 인용수와 논문수를 비교할 때마다 answer += 1을 해주는 방법이 있고 반복문을 돌고 난 이후에도 return되지 않는다면 결국엔 citations.length가 되기 때문에 return n을 사용하는 방법도 있다.

function solution(citations) {
  const n = citations.length;
  let answer = 0;

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

  for (let i = 0; i < n; i += 1) {
    if (i >= citations[i]) {
      answer = i;
      return answer;
    }
  }
  return n;
}

reference

  1. https://en.wikipedia.org/wiki/H-index
  2. https://ko.wikipedia.org/wiki/H_%EC%A7%80%EC%88%98
  3. https://www.ibric.org/myboard/read.php?Board=news&id=270333
반응형

댓글