
문제 설명이 약간 불친절한 문제였다.
쉽게 말해서, n편의 논문중에, 1번 이상 인용된 논문이 1번 이상이면 1은 H-Index가 될 자격이 있다는 것이고,
그 H-Index가 될 자격을 갖춘 것들 중의 최댓값을 찾아달라는 문제였다.
문제 자체는 쉬운 편에 속해서 로직을 짜는데도 시간이 얼마 걸리지 않았다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool compare(int a, int b){
return a > b;
}
int calc(vector<int> citations, int num){ // num 회 이상 인용된 논문이 몇 건인지 구해주는 함수이다.
int count = 0;
for(int i = 0;i < citations.size();i++){
if(citations[i] < num) break;
count++;
}
return count;
}
int solution(vector<int> citations) {
int answer = 0;
vector<int> list(citations.size());
sort(citations.begin(), citations.end(), compare);
for(int i = 0; i < list.size(); i++){
list[i] = calc(citations, i + 1); // list에 각 횟수별 인용된 논문의 개수를 저장해주었다.
}
for(int i = 0; i < list.size(); i++){
if(list[i] >= i + 1) answer = i + 1; // h가 될 수 있는 것들 중에 최댓값을 뽑아주었다.
}
return answer;
}