has won 2022. 5. 3. 15:05
반응형

오늘은 자주 사용하는 벡터의 sort에 관해 정리하고자 한다

 

vector의 선언은 다음과 같이 하면 편리하다.

vector<pair< pair <int, int>, pair<int, int> > >  data;

vector의 정렬은 다음과 같이 응용하면 편리하다

// id total sumbit last
bool compare(pair<pair<int,int>,pair<int,int> >  a, pair<pair<int,int>,pair<int ,int> > b){
	if(a.first.second == b.first.second){

		if(a.second.first == b.second.first){
			return a.second.second < b.second.second;
		}
		return a.second.first < b.second.first;
	}
	return a.first.second > b.first.second;
}

sort 메소드의 사용은 다음과 같이 응용한다.

sort(data.begin(),data.end(),compare);

 

추가로 vector 삽입은 다음과 같이 응용한다.

// id total submit, last
data.push_back(pair<pair<int,int>,pair<int,int> >(make_pair(i,total[i]),make_pair(submit[i],last[i])));

 

#include <bits/stdc++.h>

using namespace std;

// id total sumbit last
bool compare(pair<pair<int,int>,pair<int,int> >  a, pair<pair<int,int>,pair<int ,int> > b){
	if(a.first.second == b.first.second){

		if(a.second.first == b.second.first){
			return a.second.second < b.second.second;
		}
		return a.second.first < b.second.first;
	}
	return a.first.second > b.first.second;
}


int main(){
	int T;

	scanf("%d",&T);
	for(int p=0;p<T;p++){
		vector<pair< pair <int, int>, pair<int, int> > >  data;
		int score[101][101]={0};
		int submit[101]={0};
		int last[101]={0};


		int n,k,t,m;
		scanf("%d %d %d %d",&n,&k,&t,&m);

		for(int l=0;l<m;l++){
			int i,j,s;
			scanf("%d %d %d",&i,&j,&s);	
			score[i][j] = max(score[i][j],s);
			submit[i]++;
			last[i] = l;
		}
		int total[101]={0};
		for(int i=1; i<=n;i++){
			for(int j=1;j<=k;j++){
				total[i] += score[i][j];
			}
			// id total submit, last
			data.push_back(pair<pair<int,int>,pair<int,int> >(make_pair(i,total[i]),make_pair(submit[i],last[i])));
		}
		
		sort(data.begin(),data.end(),compare);

		for(int i=0;i<n;i++){
			if(data[i].first.first == t){
				//printf("\n이게 정답이다 %d\n", i+1);
				printf("%d\n",i+1);
			}
		}


	}
	
}
반응형