반응형
해당 문제는 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 i, int n1, int 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& s1, score& 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& ref, score& 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];
}
반응형
댓글