본문 바로가기

Computer Science&Engineering/코딩테스트

[백준 10825] 국영수 정렬문제

# 문제링크

www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

 

STL의 sort 에 compare 함수로 구현했습니다.

 

# 제출 코드 

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
struct Student {
	string name;
	int kor;
	int eng;
	int math;
};

bool compare(const Student&a, const Student&b) {
	if (a.kor > b.kor) return true;
	else if (a.kor == b.kor) {
		if (a.eng < b.eng) return true;
		else if (a.eng == b.eng) {
			if (a.math > b.math) return true;
			else if (a.math == b.math)
				return a.name < b.name;
		}
	}
	return false;
}
int main() {
	int n;
	cin >> n;

	vector<Student>v(n);
	for (int i = 0; i < n; i++) {
		cin >> v[i].name >> v[i].kor >> v[i].eng >> v[i].math;
	}

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

	for (int i = 0; i < n; i++) {
		cout << v[i].name <<'\n';
	}
	return 0;
}
반응형