반응형
안녕하세요? 수구리입니다.
이번 포스팅은 H-Index에 대한 문제입니다.
아래에 문제 링크입니다.
[ 문제 ] 코딩테스트 연습 Level 2: H-Index
https://programmers.co.kr/learn/courses/30/lessons/42747
H-Index란 ?
H-Index는 과학자의 생산성과 영향력을 나타내는 지표이다.
어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 한다.
H-Index 계산방법
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고
나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
예제
- citations : 한 과학자가 발표한 논문의 인용 횟수에 대한 배열
citations | return |
[3, 0, 6, 1, 5] | 3 |
- 한 과학자가 총 5편의 논문을 발표
- 5개의 논문 중 3편의 논문 (3, 6, 5)는 3회 이상 인용
- 나머지 2편의 논문은 3회 이하 인용
따라서 이 과학자의 H-Index는 3이 됩니다.
[ 풀이 ]
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> citations) {
int answer = 0;
// 내림차순 정렬
sort(citations.begin(), citations.end(), greater<int>()); // [6, 5, 3, 1, 0]
// 인용수가 0이면 H-index는 0
if (!citations[0]) return 0;
for(int i = 1; i <= citations.size(); i++) {
if ( citations[i-1] >= i ) {
answer++;
} else {
break;
}
}
return answer;
}
[ 설명 ]
1. 우선 입력값인 배열 citations를 내림차순 정렬한다.
2. 내림차순으로 정렬을 했는데 citations[0] 값이 0이면 H-Index는 0이다.
3. 지역변수 i가 1부터 시작하지만, 배열의 모든 요소를 순회하기 위해서 size만큼 반복하며, 조건문에서 citations[ i - 1 ] 을 통해서 citations[0] 부터 citations[end] 까지 순회할 수 있다.
4. 만약 인용된 횟수가 순회하는 index값인 i보다 크거나 같다면 answer를 하나 증가시킨다.
5. 순회하다가 i가 citations 배열의 요소보다 커지는 순간 반복을 빠져나와 그때의 answer값은 H-Index이다.
[ 결과 ]
반응형
'✏️ PS > Programmers' 카테고리의 다른 글
[ C++ ] 프로그래머스 Level2: 다음 큰 숫자 (0) | 2022.02.14 |
---|---|
[ C++ ] 프로그래머스 Level 1: 핸드폰 번호 가리기 (0) | 2022.01.11 |
[ C++ ] 프로그래머스 Level1: 문자열 내 p와 y의 개수 (0) | 2022.01.11 |
[ C++ ] 프로그래머스: 같은 숫자는 싫어 (2) | 2022.01.04 |
[ C++ ] 프로그래머스: 나누어 떨어지는 숫자 배열 (0) | 2021.12.30 |