한 걸음씩
[프로그래머스][JS] H-Index ✅ 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(citations) {
// citations = [3, 0, 6, 1, 5]
// 논문들의 인용횟수를 내림차순으로 정렬
const H = citations.sort((a, b) => b - a)
// H = [6, 5, 3, 1, 0]
let cnt = 0 // 현재 순번까지의 논문 중 인용 횟수가 순번 이상인 논문의 개수
for (let i = 1; i <= H.length; i++){
H.forEach(item => {
// 인용 횟수가 논문의 순번보다 크거나 같은 경우 해당 논문은 카운트
if (i <= item){
cnt++
}
})
// 논문 인용 횟수(cnt)가 순번 이상(i)일 경우 리턴
if (i >= cnt){
return cnt
}
cnt = 0
}
}
정렬된 citations = [6, 5, 3, 1, 0] 일 때
i = 1 -> 6, 5, 3, 1 (4번)
i = 2 -> 6, 5, 3 (3번)
i = 3 -> 6, 5, 3 (3번) : 순번(i)이 3일 때, 논문 인용 횟수가 3이상 → 3번 이상 인용된 논문이 3편 이상이고, 나머지 논문은 3번 이하 인용되었다. 때문에 H-index는 3이다.
i = 4 -> 6, 5 (2번)
i = 5 -> 6, 5 (2번)
리뷰
처음 문제를 시도했을 때 정렬하지 않고 주어진 배열 그대로, i === cnt 조건으로 풀었는데 통과하지 못했다.
왜 내림차순 정렬을 해야하고 마지막 조건문에서 i >= cnt가 참이 되어야 리턴을 할 수 있는지 이 부분이 이해가 잘 되지 않는다
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] 푸드 파이트 대회 (0) | 2023.09.05 |
---|---|
[프로그래머스][JS] 영어 끝말잇기 ✅ (0) | 2023.09.05 |
[프로그래머스][JS] 의상 (0) | 2023.08.15 |
[프로그래머스][JS] 귤 고르기 (0) | 2023.08.14 |
[프로그래머스][JS] 최고의 집합 ✅ (0) | 2023.08.12 |