Study hard

(c++)백준 10825번: 국영수 본문

백준/여러가지 문제들

(c++)백준 10825번: 국영수

Nimgnoej 2020. 6. 11. 16:09

https://www.acmicpc.net/problem/10825

 

10825번: 국영수

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

www.acmicpc.net

 

[풀이]

C++ STL의 sort함수를 이용하여 해결할 수 있다. 

문제의 조건에 맞는 사용자 함수를 만들어 sort의 세 번째 인수로 넣어야 한다.

 

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>//sort
using namespace std;

struct Score {
	string name;
	int Kor, Eng, Math;
};

int N;
vector<Score>v;//학생 점수 정보 저장

bool sortScore(Score &A, Score &B) {
	if (A.Kor == B.Kor) {
		if (A.Eng == B.Eng) {
			if (A.Math == B.Math) {
				return A.name < B.name;
			}
			return A.Math > B.Math;
		}
		return A.Eng < B.Eng;
	}
	return A.Kor > B.Kor;
}

void input() {
	string name;
	int K, E, M;
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> name >> K >> E >> M;
		v.push_back({ name,K,E,M });
	}
}

void solution() {
	input();
	sort(v.begin(), v.end(), sortScore);
	for (int i = 0; i < N; i++) {
		cout << v[i].name << '\n';
	}
}

int main() {
	solution();
	return 0;
}