관리 메뉴

Storage Gonie

(5) [C++] 백준 No.10825 : 국영수 본문

알고리즘/백준풀이8. 정렬

(5) [C++] 백준 No.10825 : 국영수

Storage Gonie 2019. 5. 14. 21:40
반응형

문제

풀이

# C++(tutple, sort( , ,비교함수) 이용)

- 중첩된 if문을 사용하지 않으므로 실수를 방지할 수 있다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>

using namespace std;

struct Person{
    string name;
    int kor, eng, math;
};

bool cmp(const Person &u, const Person &v){
    return make_tuple(-u.kor, u.eng, -u.math, u.name) < make_tuple(-v.kor, v.eng, -v.math, v.name);
}

int main()
{
    int T;
    cin >> T;

    vector<Person> vec(T);

    for (int i = 0; i < T; i++)
        cin >> vec[i].name >> vec[i].kor >> vec[i].eng >> vec[i].math;

    sort(vec.begin(), vec.end(), cmp);

    for (int i = 0; i < T; i++)
        cout << vec[i].name << "\n";
}

 

# C++(구조체, sort( , ,비교함수) 이용)

#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>

using namespace std;

struct Person{
    string name;
    int kor, eng, math;
};

bool cmp(const Person &u, const Person &v){
    if(u.kor > v.kor)
        return true;
    else if(u.kor == v.kor)
    {
        if (u.eng < v.eng)
            return true;
        else if(u.eng == v.eng){
            if (u.math > v.math)
                return true;
            else if (u.math == v.math)
                return u.name < v.name;
        }
    }
    return false;
}

int main()
{
    int T;
    cin >> T;

    vector<Person> vec(T);

    for (int i = 0; i < T; i++)
        cin >> vec[i].name >> vec[i].kor >> vec[i].eng >> vec[i].math;

    sort(vec.begin(), vec.end(), cmp);

    for (int i = 0; i < T; i++)
        cout << vec[i].name << "\n";
}
반응형
Comments