문제
문제 설명
학생들의 국어, 영어, 수학 점수를 특정 조건에 맞게 정렬한 뒤 학생 이름을 순서대로 출력하는 문제
코드
#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'을 사용하면 해결된다.
'Koala - 9기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/C++] 11655번 ROT13 (0) | 2023.02.12 |
---|---|
[백준/Python] #2309 일곱 난쟁이 (0) | 2023.02.12 |
[백준/Python] 15650번 N과 M (2) (0) | 2023.02.12 |
[백준 / python] #12789: 도키도키 간식드리미 (0) | 2023.02.12 |
[백준/Python] 1718번 암호 (0) | 2023.02.10 |