https://www.acmicpc.net/problem/10814
사람들의 나이와 이름을 가입한 순서대로 넣고, 회원들을 나이를 기준으로 오름차순으로 정렬하되 나이가 같으면
먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 구현하는 문제이다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <utility> //pair
using namespace std;
bool compare(pair<int, string>a, pair<int, string>b)
{
if (a.first == b.first)
{
return false;
}
else
{
return a.first < b.first;
}
}
int main()
{
int N;
int Y;
string S;
cin >> N;
vector<pair<int, string>> arr;
for (int i = 0; i < N; i++)
{
cin >> Y >> S;
arr.push_back(make_pair(Y, S));
}
stable_sort(arr.begin(), arr.end(), compare); //sort >> stable_sort, "값이 같으면 가입한 순서가 먼저 오도록,"
for (int i = 0; i < N; i++)
{
cout << arr[i].first << " " << arr[i].second << "\n";
}
}
나이와 이름을 입력받아야 하기에 2차원 벡터로 구현하였다. (vector<pair<int, string>>)
값이 같으면 가입한 순서가 먼저 오도록 해야하기 때문에 기존에 사용하던 정렬 함수인 sort대신에 stable_sort를
사용하고, 사용자 지정 함수를 추가하였다.( "bool compare()" )
이 구문에서 사용된 stable_sort와 전에 사용했던 sort의 차이점은 다음과 같다.
- Sort : 비안정 정렬 알고리즘, 퀵 정렬, 힙 정렬, 속도 빠름
- Stable_Sort : 안정적 정렬 알고리즘, 병합 정렬, Sort 보다는 느림.
'Algorithm' 카테고리의 다른 글
[C++] BaekJoon 9095 1, 2, 3 더하기 (0) | 2023.10.27 |
---|---|
[C++] BaekJoon 1463 1로 만들기 (0) | 2023.10.26 |
[C++] map (0) | 2023.10.15 |
[C++] BaekJoon 10866 덱 (0) | 2023.09.26 |
[C++] BaekJoon 10773 제로 (0) | 2023.09.26 |