<프로그래머스 C++> H-Index 풀이 ( 정렬 )
2026. 6. 26. 11:18ㆍProgrammers
문제
논문 n편 중 h번 이상 인용된 논문이 h편 이상이고, 나머지 논문이 h번 이하 인용되었을 때 h의 최댓값이 H-Index이다.
이 H-Index를 구하는 문제이다.

풀이 아이디어
내림차순 정렬
H-Index의 조건은 "h번 이상 인용된 논문이 h편 이상" 이다.
이 조건을 효율적으로 체크하기 위해선 인용 횟수가 많은 순서대로 논문을 나열하고 현재 인덱스와 인용 횟수를 비교하면 된다.
내림차순 정렬 후 i+1번째까지 봤을 때 citations[ i ] >= i + 1이면, "i+1편의 논문이 모두 i+1회 인용됐다" 라는 의미가 된다.
[3, 0, 6, 1, 5] → 내림차순 정렬 → [6, 5, 3, 1, 0]
i=0: citations[0]=6 >= 1 (1편 이상이 1회 이상 인용)
i=1: citations[1]=5 >= 2 (2편 이상이 2회 이상 인용)
i=2: citations[2]=3 >= 3 (3편 이상이 3회 이상 인용)
i=3: citations[3]=1 >= 4 x → 멈춤
조건이 깨지는 순간, 이전까지의 개수가 H-Index이다.
문제풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> citations) {
int answer = 0;
sort(citations.begin(), citations.end(), greater<int>());
for(int i = 0; i < citations.size(); ++i)
{
if(citations[i] >= i+1)
answer++;
else
break;
}
return answer;
}
코드 흐름
1. 내림차순 정렬
sort(citations.begin(), citations.end(), greater<int>());
인용 횟수가 많은 논문부터 순서대로 나열한다.
greater<int>()를 이용해서 내림차순 정렬한다.
2. 조건 체크
if(citations[i] >= i+1)
answer++;
else
break;
i + 1은 현재까지 확인한 논문 수이다.
citations[ i ] >= i + 1이면 i + 1편의 논문이 모두 i + 1회 이상 인용됐다는 의미이므로 answer를 증가시킨다.
조건이 깨지는 상황부터는 확인할 필요가 없으니 바로 break한다.
핵심 포인트
- 내림차순 정렬하면 citations[i] >= i+1 조건 하나로 H-Index를 구할 수 있다.
- 조건이 깨지는 순간 break해서 불필요한 탐색을 줄인다.
'Programmers' 카테고리의 다른 글
| <프로그래머스 C++> 원형 수열의 연속 부분 수열 합 풀이 (set) (0) | 2026.06.24 |
|---|---|
| <프로그래머스 C++> 괄호 회전하기 풀이 (stack) (0) | 2026.06.23 |
| <프로그래머스 C++> 귤 고르기 풀이 (unordered_map, greedy) (0) | 2026.06.22 |
| <프로그래머스 C++> 멀리 뛰기 풀이 (피보나치) (0) | 2026.06.18 |
| <프로그래머스 C++> n개의 최소공배수 (유클리스 호제법) (0) | 2026.06.17 |