개발/백준

[백준] 10825번. 국영수 (C++)

yun000 2023. 6. 13. 23:40

문제 설명

https://www.acmicpc.net/problem/10825

 

10825번: 국영수

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

www.acmicpc.net

 

해결 방식

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

struct Student { string name; int Korean; int English; int Math; };

bool compare(Student& st1, Student& st2)
{
	if (st1.Korean == st2.Korean &&	st1.English == st2.English && st1.Math == st2.Math)
	{ return st1.name < st2.name; }
	else if (st1.Korean == st2.Korean && st1.English == st2.English) { return st1.Math > st2.Math; }
	else if (st1.Korean == st2.Korean) { return st1.English < st2.English; }
	else { return st1.Korean > st2.Korean; }

}

int main() {

	int N;
	cin >> N;

	vector<Student> students(N);

	for (int i = 0; i < N; i++)
	{
		cin >> students[i].name >> students[i].Korean >> students[i].English >> students[i].Math;
	}

	sort(students.begin(), students.end(), compare);

	for (Student& st : students) { cout << st.name<<"\n"; }
    
}

 

struct Student { string name; int Korean; int English; int Math; };
구조체 Student를 만들고 이름, 성적 변수들을 선언했다.


bool compare(Student& st1, Student& st2)
{
if (st1.Korean == st2.Korean && st1.English == st2.English && st1.Math == st2.Math ){ return st1.name < st2.name; }
else if (st1.Korean == st2.Korean && st1.English == st2.English) { return st1.Math > st2.Math; }
else if (st1.Korean == st2.Korean) { return st1.English < st2.English; }
else { return st1.Korean > st2.Korean; }
}

compare 함수를 기준으로 배열을 정렬할 것이다.

sort의 비교 기준이 될 함수는

두개의 인자를 받아서

첫번째 인자 < 두번째 인자 → true를 반환

반대의 경우 false를 반환해야한다.

 


vector<Student> students(N);
Student 구조체 배열을 만들었다. 크기는 N만큼

 


for (int i = 0; i < N; i++)
{ cin >> students[i].name >> students[i].Korean >> students[i].English >> students[i].Math; }
배열안의 구조체에 값을 채워넣는다

 


sort(students.begin(), students.end(), compare);
compare 함수를 기준으로 students 배열을 정렬한다.

 


for (Student& st : students) { cout << st.name<<"\n"; }

for-each문법으로 출력해주었다.

for(변수 : 배열 혹은 벡터)

배열 혹은 벡터의 값들을 차례로 변수에 담는다. 그리고 그 변수를 출력하는 것이다.