본문 바로가기
Algorithm

(프로그래머스) H-index - JS

by 안자바먹지 2021. 1. 18.
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

입출력 예 설명

이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.

 

소스

function solution(citations) {
  let answer = 0
  let h = citations.length
  
  for(let i = h; i >= 1; i--) {
    if (citations.filter(data => data >= i).length >= i) {
      answer = Math.max(answer,i)
    }
  }
  return answer
}

 

부족했던 점

1. 문제를 잘못 이해하고 있었음.

 

2. 이 문제는 h번 이상 인용된 논문이 h편 이상이 라는 조건이 가장 핵심이다. 일단 h의 최대값은 citations 배열의 길이 이고, h를 하나씩 줄이면서 citations 배열의 요소들 중에 h보다 크거나 같은 요소들의 개수가 현재 h보다 크거나 같으면 그 값이 정답이므로 answer에 넣고,  그중 가장 큰 값을 출력한다.

 

3. 11번 테스트 케이스만 실패하였고 그 원인은 조건문 이었는데, 문제를 보면 h편 인용된 논문의 수가 h개 이상 이므로

if( citations.filter(data => data >= i).length === i ) 가 아니라 위 처럼 해 주어야 한다.

 

728x90

'Algorithm' 카테고리의 다른 글

(프로그래머스) 3진법 뒤집기  (0) 2021.01.21
(프로그래머스) K번째수 - JS  (0) 2021.01.20
(프로그래머스) 가장 큰 수 - JS  (0) 2021.01.18
(카카오) 괄호 변환  (0) 2021.01.14
(백준) 경쟁적 전염  (0) 2021.01.14

댓글