C++ / 프로그래머스 / H-Index
문제 |
https://programmers.co.kr/learn/courses/30/lessons/42747
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
문제풀이 |
오름차순으로 정렬을 하고 첫 번째 인덱스부터 탐색한다.
새로운 값을 발견했을 경우, 답을 구하지 못한 상태이므로 이전 값들은 무조건 현재 값보다 작다.
따라서 문제의 조건에서 나머지 논문이 h번 이하 인용되었다는 조건은 필요 없어진다.
그러면 남은 조건은 h번 이상 인용된 논문이 h개 이상인 최댓값 h를 구하는 것이다.
주어진 배열의 값은 인용된 횟수이다. 따라서 h 이상인 숫자 h개 이상이면 답은 h가 된다.
배열의 맨 앞부터 탐색하게 되면 현재 인덱스를 포함한 남은 개수는 배열의 size가 된다.
citations.size() <= citations[0]이라면 답은 citations.size()가 된다. ex) [10, 10, 10, 10, 10] = 5
그다음은 현재 인덱스를 포함한 남은 개수는 size-1이 되고 남은 숫자들의 값이 모두 size-1 이상이라면 답은 citations.size()-1이 된다. ex) [1, 10, 10, 10, 10]
이 조건을 식으로 세우면 citations.size() - idx <= citations[idx], 이때 citations.size() - idx을 return하면 된다.
코드 |
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> citations) {
int answer(0), idx(0), cnt(0);
sort(citations.begin(), citations.end());
for (idx = 0; idx < citations.size(); ++idx) {
if (citations[idx] >= citations.size() - idx) {
return citations.size() - idx;
}
}
}