반응형
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> citations) {
sort(citations.begin(), citations.end(), greater<int>());
int h = 0;
for(int i = 0; i < citations.size(); ++i)
{
if(citations[i] >= i + 1) h += 1;
}
return h;
}
해설:
h-index라는 가정으로 인용수가 h라고 가정했는데 인용된 논문 수와 h가 적절하게 똑같아야 한다.
먼저 내림차순으로 정렬해야한다. #include<algorithm>을 추가해주고 citations을 sort()를 이용하영 정렬하며 greater<int>를 이용하여 내림차순으로 정렬한다. 이유는 다음과 같다.
- 1번째 논문: 인용 6번 → 1 ≤ 6 ✓
- 2번째 논문: 인용 5번 → 2 ≤ 5 ✓
- 3번째 논문: 인용 3번 → 3 ≤ 3 ✓ (여기가 마지막으로 성립하는 지점)
- 4번째 논문: 인용 1번 → 4 ≤ 1 ✗ (여기서 깨짐)
이런식으로 인용들은 높은 수부터 내려오고 index는 1씩 증가 시켜서 비교를 진행하면 정확히 중앙에 마주하기때문에 가장 빠른 방법이라고 볼 수 있다.
그렇게 인용수가 i보다 크면 h를 증가 시키고 그 범위를 벗어나면 h는 그 값에서 변화되지 않는다.
반응형
'면접' 카테고리의 다른 글
| 프로그래머스(시뮬레이션, 카카오기출; 문자열 압축) c++ (0) | 2026.08.31 |
|---|---|
| 프로그래머스(탐욕법; 구명보트) c++ (0) | 2026.08.30 |
| 프로그래머스(정렬; 가장 큰 수) c++ (0) | 2026.08.30 |
| 프로그래머스(힙; 디스크 컨트롤러) c++ (0) | 2026.08.30 |
| 프로그래머스(힙; 이중우선순위큐) c++ (0) | 2026.08.30 |
