프로그래머스 H-Index 문제 풀이를 진행하였습니다.
문제를 읽으면 아래와 같은 해석이 가능합니다.
과학자가 발표한 논문 n편의 이용 횟수가 배열로 주어집니다.
h번 이상 인용된 논문이 h편 이상이고, 나머지 논문이 h번 이하 인용되었다면 h의 최대값이 과학자의 H-Index가 됩니다.
주어진 배열의 H-Index을 구해야합니다.
최대값을 구해야 하기 때문에 오름차순으로 정렬해줍니다.
이후 제일 큰 값부터 차례대로 내려오며 위의 조건에 해당하는 첫 번째 h값을 찾으면 그 값이 h의 최대값이 됩니다.
#include <bits/stdc++.h>
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> citations) {
int answer = 0;
//오름차순으로 정렬
sort(citations.begin(), citations.end());
int index = citations.size()-1;
int upCnt = 0;
int downCnt = citations.size();
//제일 큰 수부터 차례대로 내려가며 h값 탐색
for(int i = citations[citations.size()-1]; i >= 0; i--)
{
if(citations[index] >= i)
{
upCnt++;
downCnt--;
index--;
}
//제일 높은 수부터 탐색했으므로 처음으로 찾은 값이 정답
if(i <= upCnt && i >= downCnt)
{
answer = i;
break;
}
}
return answer;
}
https://school.programmers.co.kr/learn/courses/30/lessons/42747