백준 10825 c++

magicdrill·2024년 3월 14일

백준 문제풀이

목록 보기
146/673

백준 10825 c++

오랜만에 정렬문제를 풀어보았다.
사용자정의 함수를 통해 정렬조건을 만드는 문제다.
실행 결과 다른 사람들의 풀이보다 메모리사용량과 시간소모에서 많이 뒤떨어졌다.
나는 자료를 벡터형으로 저장했고, 다른 사람들은 구조체로 저장한 차이때문이라고 생각되는데 다음 문제는 구조체로 저장한 경우, 벡터로 저장한 경우 둘을 비교해 보겠다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void input_info(vector < pair<string, vector<int>>>& info)
{
	int i, N;
	string name; 
	int korean, english, math;
	
	cin >> N;
	for (i = 0; i < N; i++)
	{
		cin >> name >> korean >> english >> math;
		info.push_back({ name, {korean, english, math} });
	}

	return;
}

bool compare(pair<string, vector<int>> A, pair<string, vector<int>> B)
{
	if (A.second[0] == B.second[0])//국어점수가 같은 경우
	{
		if (A.second[1] == B.second[1])//영어점수가 같은 경우
		{
			if (A.second[2] == B.second[2])//수학점수가 같은 경우
			{
				//이름이 사전순으로 증가하는 순서로
				return A.first < B.first;//오름차순

			}
			else//수학점수가 감소하는 순
			{
				return A.second[2] > B.second[2];//내림차순
			}
		}
		else//영어점수가 증가하는 순
		{
			return A.second[1] < B.second[1];//오름차순
		}
	}
	else//국어점수가 감소하는 순서로
	{
		return A.second[0] > B.second[0];//내림차순
	}
}

void find_answer(vector < pair<string, vector<int>>>& info)
{
	int i;

	sort(info.begin(), info.end(), compare);
	for (i = 0; i < info.size(); i++)
	{
		cout << info[i].first << "\n";
	}

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	vector < pair<string, vector<int>>> info;

	input_info(info);
	find_answer(info);

	return 0;
}

0개의 댓글