1. 문제 해결 전략
복잡해 보이지만 결국 if-else 놀음일 뿐이다.
compare 부분을 작성할 때 오름차순이냐 내림차순이냐만 잘봐도 충분히 잘 풀 수있는 문제.
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
class student
{
public:
int kor;
int eng;
int math;
string name;
student(int kor, int eng, int math, string name)
{
this->kor = kor;
this->eng = eng;
this->math = math;
this->name = name;
}
};
vector<student> v;
bool compare(const student& st1, const student& st2)
{
if (st1.kor == st2.kor)
{
if (st1.eng == st2.eng)
{
if (st1.math == st2.math)
{
return st1.name < st2.name;
}
else
return st1.math > st2.math;
}
else
return st1.eng < st2.eng;
}
else
return st1.kor > st2.kor;
}
int main(void)
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int kor, eng, math;
string name;
cin >> name;
scanf("%d %d %d", &kor, &eng, &math);
v.push_back(student(kor, eng, math, name));
}
sort(v.begin(), v.end(), compare);
for (int i = 0; i < n; i++)
{
printf("%s\n", v[i].name.c_str());
}
}
2. 걸린 시간
20분
3. 느낀점
처음에 이름비교를 잘못해서 컴파일 에러가 떴다.
아스키 코드 생각하고 .. int로 캐스팅했다가 뜬 에러였다.
그리고, 문자열은 (string 라이브러리 이용) 연산자 오버로딩이 자동으로 되어있어서
크기 비교를하면 알아서 사전순으로 정렬을 해 준다. 잊지말자!
4. 링크
https://www.acmicpc.net/problem/10825
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[스택] 10828. 스택 (0) | 2020.04.28 |
---|---|
[정렬] 11652. 카드 (0) | 2020.04.21 |
[정렬] 10814. 나이순 정렬 (0) | 2020.02.18 |
[정렬] 11650. 좌표 정렬 (0) | 2020.02.18 |
[정렬] 2571. 수 정렬하기 2 (0) | 2020.02.18 |