728x90
문제
https://www.acmicpc.net/problem/10825
문제 분석
학생의 이름과 국어, 수학, 영어 과목에 따라 정렬한다.
국어는 감소, 영어는 증가, 수학은 감소, 이름은 사전순으로 정렬해준다.
알고리즘 설계
이름과 국영수 과목의 점수를 입력 받고, 모두 tuple을 가지고 있는 vector에 넣어준다.
이후 sort를 해주는데 compare을 해주어 직접 설정해준다.
국어를 우선으로 감소 순으로, 이후 영어는 증가순, 수학은 감소순으로, 마지막 이름을 사전 순으로 정렬한다.
유의점
sort 옆에 둘 compare을 짤때 헷갈리지 않도록 작성한다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
using namespace std;
bool Compare(tuple<string, int, int, int> t1, tuple<string, int, int, int> t2);
int main()
{
int loop, input1, input2, input3;
string str;
vector<tuple<string, int, int, int>> vec;
cin >> loop;
while (loop--)
{
cin >> str >> input1 >> input2 >> input3;
vec.push_back(make_tuple(str, input1, input2, input3));
}
sort(vec.begin(), vec.end(), Compare);
for (auto t : vec)
cout << get<0>(t) << '\n';
}
bool Compare(tuple<string, int, int, int> t1, tuple<string, int, int, int> t2)
{
if (get<1>(t1) < get<1>(t2))
return false;
else if (get<1>(t1) > get<1>(t2))
return true;
else
{
if (get<2>(t1) < get<2>(t2))
return true;
else if (get<2>(t1) > get<2>(t2))
return false;
else
{
if (get<3>(t1) < get<3>(t2))
return false;
else if (get<3>(t1) > get<3>(t2))
return true;
else
{
if (get<0>(t1) < get<0>(t2))
return true;
else
return false;
}
}
}
}
728x90
'ALGORITHM > C++ - 백준' 카테고리의 다른 글
[백준 25192] 인사성 밝은 곰곰이 (1) | 2023.11.13 |
---|---|
[백준 11004] K번째 수 (0) | 2023.11.13 |
[백준 7795] 먹을 것인가 먹힐 것인가 (0) | 2023.11.09 |
[백준 10816] 숫자 카드 2 (1) | 2023.11.09 |
[백준 11399] ATM (0) | 2023.10.26 |
댓글