문제

국영수 백준 10825

"맞았습니다."코드

#include <bits/stdc++.h>
using namespace std;

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

int n, kor, eng, math;
string st;
vector<student> v;

bool cmp(student &a, student &b){
  if(a.kor == b.kor && a.eng == b.eng && a.math == b.math) return a.name < b.name;
  else if(a.kor == b.kor && a.eng == b.eng) return a.math > b.math; // 수학 감소하는 순서
  else if(a.kor == b.kor) return a.eng < b.eng; // 영어 증가하는 순서
  else return a.kor > b.kor; //국어 감소하는 순서
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> n;
  for(int i = 0; i < n; i++){
    cin >> st >> kor >> eng >> math;
    student s = {st, kor, eng, math};
    v.push_back(s);
  }
  sort(v.begin(), v.end(), cmp);
  for(auto i : v) cout << i.name << '\n';
  return 0;
}

리뷰

비교 함수를 정확히 구현해야 맞을 수 있는 문제였다.
비교 함수를 작성할 때 조건이 구체적인 것 부터 걸러내야 한다.
그래서 '모든 점수가 같으면' 이름이 사전순 증가 하게 출력하라는 조건부터 if문을 시작해야 한다.
문제에서 나오는 조건 대로 작성했다가 처음 풀었을 때 틀렸다.

728x90

+ Recent posts