H-Index : 문제 링크
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index이다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하이다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하이다.
배열의 내림차순 정렬을 위해 sort() 함수를 사용할 것 이므로 algorithm 헤더를 포함
H-Index의 정의를 다시 풀어보면 논문 n편 중, a번 이상 인용된 논문이 b편 이상이면 a, b중 작은 값이 H-Index이다. 따라서, 배열 citations을 내림차순으로 정렬하고, 인덱스 번호를 인용된 논문 수로 이용하여 풀었다.
sort() 함수를 사용하여 배열 citations를 내림차순으로 정렬. for loop를 사용하여 citations의 마지막 원소부터 첫번째 원소까지 순회하고, 현재 인덱스 i에서 1을 더한 값이 인용된 논문 수를 의미한다. 순회하다가 인용 횟수가 인용된 논문 수 이상일 경우를 찾으면 인용된 논문 수가 H-Index이다. 따라서, if문을 사용하여 현재 인덱스의 citations 원소가 i + 1 이상일 경우 i + 1을 return
예시
- [10, 8, 5, 4, 3] 의 인용횟수를 가진 교수가 있다면
10번 이상 인용 횟수를 가진 논문은 1편이다. 이때 H-Index는 1.
8번 이상 인용 횟수를 가진 논문은 2편이다. 이때 H-Index는 2.
5번 이상 인용 횟수를 가진 논문은 3편이다. 이때 H-Index는 3.
4번 이상 인용 횟수를 가진 논문은 4편이다. 이때 H-Index는 4.
3번 이상 인용 횟수를 가진 논문은 5편이다. 이때 H-Index는 3.
- [9, 7, 6, 2, 1] 의 인용횟수를 가진 교수가 있다면
9번 이상 인용 횟수를 가진 논문은 1편이다. 이때 H-Index는 1.
7번 이상 인용 횟수를 가진 논문은 2편이다. 이때 H-Index는 2.
6번 이상 인용 횟수를 가진 논문은 3편이다. 이때 H-Index는 3.
2번 이상 인용 횟수를 가진 논문은 4편이다. 이때 H-Index는 2.
1번 이상 인용 횟수를 가진 논문은 5편이다. 이때 H-Index는 1.
algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬
- sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
- sort(v.rbegin(), v.rend()); // 내림차순
- sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
- sort(v.begin(), v.end(), less<자료형>()); // 오름차순
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> citations) {
sort(citations.rbegin(), citations.rend());
for(int i = citations.size() - 1; 0 <= i; --i) {
if(citations[i] >= i + 1) return i + 1;
}
}