본문 바로가기
ALGORITHM/C++ - 백준

[백준 10825] 국영수

by DDongYeop 2023. 11. 9.
728x90

문제

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

 

10825번: 국영수

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

www.acmicpc.net

 

 

문제 분석

학생의 이름과 국어, 수학, 영어 과목에 따라 정렬한다. 

 

국어는 감소, 영어는 증가, 수학은 감소, 이름은 사전순으로 정렬해준다. 

 

 

알고리즘 설계

이름과 국영수 과목의 점수를 입력 받고, 모두 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

댓글