Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[JavaScript] 프로그래머스 코딩테스트 레벨 2 : H-Index 본문

⚙️ 코딩테스트

[JavaScript] 프로그래머스 코딩테스트 레벨 2 : H-Index

썸머몽 2023. 6. 27. 02:28
728x90

📌  문제

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations 매개변수로 주어질 , 과학자의 H-Index return 하도록 solution 함수를 작성해주세요.

📌  제한사항

  • 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
  • 논문별 인용 횟수는 0 이상 10,000 이하입니다.

📌  입출력 예

citations return
[3, 0, 6, 1, 5] 3

📌  풀이

알아야 하는 것

문제가 정말 이해가 되지 않아 한참 고민하다가 그냥 검색했다. 문제를 이해하려고 하지 말고 그냥 내가 H-index가 뭔지 검색해보는 게 더 빨랐다. H-Index는 결국 많이 인용된 순으로 정렬(내림차순) 후 인용 횟수 h가 h편이 된 순간을 구하면 되는 것이다. ^^

구할 것

내림차순으로 정렬 후 for문으로 순회하면서 인용 횟수를 확인한다.

이 때 반복하는 변수 i는 지금 확인하고 있는 인용 횟수, citations[i]는 인용 횟수가 큰 순서대로 정렬된 배열에서 현재 있는 위치다.

따라서 i >= citations[i]라면 i가 H-Index 후보가 된다. 

 

0 >= 6

1 >= 5

2 >= 3

3 >= 1

4 >= 0

 

이 때 4 >= 0도 참이지만 큰 순서대로 진행하기 때문에 최종으로 답은 3이 나온다.

 

하지만 이 때 citations 배열을 다 돌아도 H-Index를 구하지 못하는 경우가 있을 수 있다.

예컨대 [22, 42]의 경우 0 >= 42, 1 >= 22로 둘다 false가 되어 답을 구할 수 없다.

이는 모든 인용 횟수가 H-Index보다 크다는 뜻으로 최댓값은 논문의 갯수와 동일하게 된다.

따라서 이런 경우는 논문의 갯수를 반환해주면 된다.

 

function solution(citations) {
  citations.sort((a, b) => b - a);
  for (let i = 0; i < citations.length; i++) {
    if (i >= citations[i]) {
      return i;
    }
  }
  return citations.length;
}

 

솔직히 이건 문제 설명이 너무했다...

728x90