Koala - 9기/기초 알고리즘 스터디

[백준 / C++] 10825번: 국영수

님남누 2023. 2. 12. 14:52

문제

 

10825번: 국영수

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

www.acmicpc.net


문제 설명

학생들의 국어, 영어, 수학 점수를 특정 조건에 맞게 정렬한 뒤 학생 이름을 순서대로 출력하는 문제


코드

#include <iostream>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>

using namespace std;

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

bool sortFunc (student A, student B) {
    if (A.kor == B.kor && A.eng == B.eng && A.math == B.math) return (A.name < B.name);
    if (A.kor == B.kor && A.eng == B.eng) return (A.math > B.math);
    if (A.kor == B.kor) return (A.eng < B.eng);
    return (A.kor > B.kor);
}

int main() {

    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

    int N; cin >> N;
    string name, kor_score, eng_score, math_score;

    vector <student> v(N);

    for (int i = 0; i < N; i++) {
        cin >> v[i].name >> v[i].kor >> v[i].eng >> v[i].math;
    }

    sort(v.begin(), v.end(), sortFunc);

    for (int j = 0; j < N; j++) {
        cout << v[j].name << '\n';
    }
    
    return 0;
}

문제 풀이

구조체와 bool형 함수, sort 함수, vector를 사용해 풀었다.

1. vector의 자료형에 구조체를 넣어서 입력을 받는다.

2. 입력받은 vector를 조건에 맞게 정렬한다.

2 - 1. 정렬 조건은 bool 함수로 제작하는데

  • 기본적으로 국어 점수가 높 -> 낮 순으로
  • 국어 점수가 같다면 영어 점수가 낮 -> 높 순으로
  • 국어와 영어 점수가 같다면 수학 점수가 높 -> 낮 순으로
  • 국어 영어 수학 점수가 모두 같다면 이름을 사전 순으로

        반환하도록 if문을 작성했다. 

3. 정렬된 vector를 출력한다.


주의 할 점

endl을 사용하면 버퍼를 비워주는 과정으로 인해 시간초과가 발생한다.

'\n'을 사용하면 해결된다.