프로그래머스/2레벨
H-Index/C++
Koalitsiya
2023. 1. 10. 13:34
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[3, 0, 6, 1, 5]에서 3번이상 인용된 논문이 3편이고 이외의 논문은 3회 이하 인용되었기에 H-Index는 3이다.
다른 예시로 [5,4,3,6,2,1,5]가 있다고 할 때 우선 풀이하기 좋도록 내림차순으로 정렬하면 [6,5,5,4,3,2,1]이 된다.
arr = [6,5,5,4,3,2,1]
이것의 H-Index를 구하면 아래 표와 같다.
i = 0 | 6 | H-Index = 1 |
i = 1 | 6,5 | H-Index = 2 |
i = 2 | 6,5,5 | H-Index = 3 |
i = 3 | 6,5,5,4 | H-Index = 4 |
i = 4 | 6,5,5,4,3 | X |
표를 보면 5에서부터는 숫자가 H-Index보다 작아지므로 H-Index는 4가 된다.
이를 보면 arr[i]가 i이하가 되기 전의 H-Index값이 최대임을 알 수 있다.
풀이 방법
1. citations의 요소들을 내림차순으로 정렬한다.
2. citations[i]가 i이하면 break, 아니면 HIndex++을 한다.
3. 반복문이 끝나면 HIndex를 리턴
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> citations) {
int HIndex = 0;
sort(citations.begin(), citations.end(), greater<int> ());
for(int i = 0; i < citations.size(); i++) {
if(citations[i] <= i) break;
else HIndex++;
}
return HIndex;
}