알고리즘
프로그래머스 알고리즘 문제풀이: H-index
양찬우
2021. 11. 6. 18:27
728x90
- 프로그래머스 정렬 level 2
- H-index 위키백과 설명
- 과학자의 생산성 및 영향력을 나타내는 지표인 H-index를 계산하는 문제이다.
- 어떤 과학자가 발표한 논문 중, H번 이상 인용된 논문이 H편 이상이고 나머지 논문이 모두 H번 이하 인용되었다면, 이때H의 최댓값이 H-index다.
- 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 주어질 때, 이 과학자의 H-index를 계산하시오.
풀이
- numeric 배열에서 H 이상인 값의 개수를 셌을 때, 최댓값인 고르는 문제이다.
- 즉,
- 주어진 배열을 오름차순 정렬했을 때
- 특정 index의 value가 정렬된 배열에서 해당 index 부터 배열의 마지막까지의 길이보다 크고,
- 위의 두 조건을 충족하면서 가장 작은 index (제일 먼저 등장한 h-index)라면,
- 해당 index부터 배열의 마지막까지의 길이가 H-index의 최댓값이다.
예시 코드
Javascript
- 파이썬과 동일한 로직이지만, JS의 sort()는 아스키코드 기준 비교라서 numeric array를 그냥 sort()하면 1,10,11,2,3, ...처럼 숫자 크기로 정렬되지 않는다.
function solution(citations) {
var answer = 0;
// 숫자를 오름차순으로 정렬하는 정렬규칙을 추가한다.
citations = citations.sort(function (a, b) {
return a - b;
});
for (let idx = 0; idx < citations.length + 1; idx++) {
if (citations[idx] >= citations.slice(idx).length) {
answer = citations.slice(idx).length;
break;
}
}
return answer;
}
Python
def solution(citations):
answer = 0
citations = sorted(citations) # 파이썬의 sorted는 디폴트가 오름차순 정렬이다.
for idx, paper in enumerate(citations):
if paper >= len(citations[idx:]):
answer = len(citations[idx:])
break
return answer
728x90