[정렬] 10825. 국영수

알고리즘/백준 알고리즘

2020. 2. 18. 17:50

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