카테고리 없음

백준 10825 국영수

혀니리리 2023. 12. 12. 16:19
728x90

10825번: 국영수 (acmicpc.net)

 

10825번: 국영수

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

www.acmicpc.net

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct Student{
    string name;
    int korScore;
    int matScore;
    int engScore;
};

bool cmp(Student a, Student b) {
    if (a.korScore == b.korScore && a.engScore == b.engScore && a.matScore == b.matScore) return a.name < b.name;
    if (a.korScore == b.korScore && a.engScore == b.engScore) return a.matScore > b.matScore;
    if (a.korScore == b.korScore) return a.engScore < b.engScore;
    return a.korScore > b.korScore;
}

int main()
{
    int N;
    cin >> N;
    Student student[N];
    for (int i = 0; i < N; i++)
    {
        cin >> student[i].name >> student[i].korScore 
        >> student[i].engScore >> student[i].matScore;
    }
    sort(student, student + N, cmp);
    for(int i = 0; i < N; i++)
    {
        cout << student[i].name << '\n';
    }
}

조건을 똑바로 세울것

구조체 만들고, 배열로 만든것까진 잘했지만

왜 배열로 만들어야 하는지 이유를 명확히 할 필요가 있다.

 

또한 sort를 여러번 하는것으로도 시간초과가 날 수 있으니 한번에 해결하도록 하는것이 중요

문제의 조건을 그대로 구현하는 것이 중요하다.

 

그리고 endl를 쓰면 시간초과가 발생하니 주의할것

728x90