본문 바로가기
Algorithm/C++

[백준 10825] 국영수

by imagineer_jinny 2022. 9. 25.

10825번: 국영수 (acmicpc.net)

 

10825번: 국영수

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

www.acmicpc.net

 

배운것

- 문자랑 숫자랑 섞여있을 때 입력을 어떻게 하지 하고 막막할 수 있는데 새로운 구조체를 만들면 됨

-  vector 만들어주고 뒤에 v(N) N 안붙여줬더니 컴파일 에러남

-  for문을 N까지 돌리는데 당연한듯. 

- cmp 리턴할때 오름차순은 <  , 내림차순은 > 

- 이해 안되면 외울수밖에 없다

 

 

 

정답풀이1

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
 
struct STU{
    string name;
    int kor, eng, math;
};
 
//정렬 함수에 사용할 함수
bool cmp(STU a, STU 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() {
    int N;
    cin >> N;
 
    vector<STU> 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를 cmp 함수대로 정렬
    sort(v.begin(), v.end(), cmp);
 
    for (int i = 0; i < N; i++) 
        cout << v[i].name << '\n';
 
}

 

 

 

참고

[C++][백준] [정렬] 10825 국영수 (tistory.com)

'Algorithm > C++' 카테고리의 다른 글

[백준 2573] 빙산  (0) 2022.09.26
[백준 1431] 시리얼 번호  (0) 2022.09.25
[백준 11650] 좌표 정렬하기  (0) 2022.09.23
[백준 15688] 수 정렬하기 5  (0) 2022.09.21
[백준 18808] 스티커 붙이기  (0) 2022.09.20

댓글