본문 바로가기
코딩테스트/codeup

CodeUp]C++ 3017 : 정렬 기준

by Hwan2 2020. 6. 27.
728x90
반응형

해당 문제는 https://codeup.kr/problem.php?id=3017 에서 풀 수 있습니다.

해당 문제의 저작권은 Codeup에게 있습니다.


문제 분류 : 보기
문제 설명     내소스1

학생의 번호와 수학, 정보 점수를 가진 데이터가 있다.

우리는 이를 정렬하려고 한다.

정렬 기준은 수학점수가 높은 순으로 정렬하되, 수학점수가 같으면 정보점수가 높은 순, 정보점수도 같으면 번호가 빠른 순서로 정렬하려고 한다.

입력

첫째 줄에 학생수 n(번호:1~n)가 입력된다. (1 <= n <= 1,000)

둘째 줄부터 각 줄에 수학점수, 정보점수가 입력된다. (번호는 1번 부터 ~ n번 차례대로 데이터가 입력됨)

출력

정렬된 데이터를 번호, 수학, 정보 점수 순으로 각 줄에 하나씩 출력한다.

입력 예시   

5 100 90 90 100 80 80 80 90 60 50

출력 예시

1 100 90 2 90 100 4 80 90 3 80 80 5 60 50





답.


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

using namespace std;

class score {
private:
    int number;
    int a, b;
public:
    score(int iint n1int n2) : number{ i }, a{ n1 }, b{ n2 } {}
    int get_num() { return number; }
    int get_a() { return a; }
    int get_b() { return b; }
};

bool compare(score& s1score& s2) {
    if (s1.get_a() == s2.get_a()){
        if(s1.get_b() == s2.get_b())
        return s1.get_num() < s2.get_num();
        else return s1.get_b() > s2.get_b();
    }
    else
        return s1.get_a() > s2.get_a();
    
}

ostream& operator<<(ostream& refscore& s) {
    return ref << s.get_num() << " " << s.get_a() << " " << s.get_b() << "\n";
}

int main() {
    int n, a, b;
    cin >> n;
    vector<score> v;
    for (int i = 0; i < n; i++) {
        cin >> a; cin >> b;
        v.emplace_back(i + 1, a, b);
    }
    sort(v.begin(), v.end(), compare);
    for (int i = 0; i < n; i++)
        cout << v[i];
}




반응형

댓글


스킨편집 -> html 편집에서