Coding_Test_C++

BaekJoon 10825번: 국영수(C++)

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

 

10825번: 국영수

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

www.acmicpc.net

풀이법

1) C++의 강점인 STL과 algorithm 헤더 내의 sort 함수를 이용하면 풀 수 있는 문제이다.

2) 조건을 compare 라는 bool type의 함수를 만들고 설정하는 과정이 가장 중요하다.

3) 팁을 적어 보자면 감소(내림차순: >) / 증가(오름차순: <)을 활용하면 된다.

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <cstring>
#include <queue>
#include <set>
using namespace std;
int n;
pair<string, pair<int, pair<int, int>>> st;
vector<pair<string, pair<int, pair<int, int>>>> arr;
bool compare(pair<string, pair<int, pair<int, int>>>a, pair<string, pair<int, pair<int, int>>>b)
{
	if (a.second.first > b.second.first)
		return true;
	else if (a.second.first == b.second.first)
	{
		if (a.second.second.first < b.second.second.first)
			return true;
		else if (a.second.second.first == b.second.second.first)
		{
			if (a.second.second.second > b.second.second.second)
				return true;
			else if (a.second.second.second == b.second.second.second)
			{
				if (a.first < b.first)
					return true;
				else
					return false;
			}
			else
				return false;
		}
		else
			return false;
	}
	else
		return false;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		string s;
		int a, b, c;
		cin >> s >> a >> b >> c;
		st = { s,{a,{b,c}} };
		arr.push_back(st);
	}
	sort(arr.begin(), arr.end(),compare);
	for (int i = 0; i < arr.size(); i++)
	{
		cout << arr[i].first<<"\n";
	}
}