본문 바로가기

PS/BaekJoon

[C++/13333] Q-인덱스


 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.


lower_bound를 사용해서 문제를 해결하는데, 범위가 0부터 1000까지 이기 때문에 충분히 해결할 수 있습니다. lower_bound는 시간복잡도 logN이기 때문에 확실히 처리할 수 있습니다. 

한 학생이 발표한 총 n ≥ 1 편의 논문 중에서, k번 이상 인용된 논문이 k편 이상이고 나머지 n − k 편의 논문들 인용회수가 각각 k 번 이하라면, 해당 학생의 q-인덱스는 k이다.

문제는 이러합니다. k번 이상 인용된 논문이 k편 이상, 나머지 n - k 편의 논문들의 인용회수가 k번 이하라면? q인덱스는 k 이다. 즉 k번이 처음 시작되는 위치를 찾아내면 되는 문제입니다. 아래는 정답 코드입니다.

#include<iostream>
#include<algorithm>
#include<vector>

#define MAX 1010
using namespace std;

int n,number;
vector<int> v;

void init() {
	
	cin >> n;
	
	
	for(int i = 0; i < n; i++){
		cin >> number;
		v.push_back(number);
	}
	
	sort(v.begin(), v.end());
	
}

void solve() {
	
	for(int i = 1000; i >= 0; i--){
		
		vector<int>::iterator iter = lower_bound(v.begin(), v.end(), i);
		if(i <= v.end() - iter){
			cout << i;
			return;
		}
		
	}
	
	
}

int main() {
	
	init();
	solve();
	
	return 0;
}

'PS > BaekJoon' 카테고리의 다른 글

[C++/1019] 책 페이지  (0) 2024.08.01
[C++/1749] 점수 따먹기  (0) 2024.08.01
[C++/24391] 귀찮은 해강이  (0) 2024.07.29
[C++/17089] 세친구  (0) 2024.07.23
[C++/23843] 콘센트  (1) 2024.07.23