문제설명
소스코드
sort() 이용(quick sort)
#include <iostream>
#include <algorithm>
using namespace std;
class name_age {
public:
string name;
int age;
int idx;
bool operator < (name_age& arr) {
if (this->age != arr.age) return this->age < arr.age;
else return this->idx < arr.idx;
}
};
int main()
{
ios_base::sync_with_stdio(false); //표준 스트림 동기화 해제
cin.tie(NULL); //입력과 출력 연결 끊기
int N;
cin >> N;
name_age* arr = new name_age[N];
for (int i = 0; i < N; ++i)
{
cin >> arr[i].age >> arr[i].name;
arr[i].idx = i;
}
sort(arr, arr + N);
for (int i = 0; i < N; ++i) cout << arr[i].age << " " << arr[i].name << '\n';
}
stable_sort() 이용(merge sort)
#include <iostream>
#include <algorithm>
using namespace std;
class name_age {
public:
string name;
int age;
};
bool compare(const name_age& a, const name_age& b) {
if (a.age != b.age) return a.age < b.age;
else return false;
}
int main()
{
ios_base::sync_with_stdio(false); //표준 스트림 동기화 해제
cin.tie(NULL); //입력과 출력 연결 끊기
int N;
cin >> N;
name_age* arr = new name_age[N];
for (int i = 0; i < N; ++i) cin >> arr[i].age >> arr[i].name;
stable_sort(arr, arr + N, compare);
for (int i = 0; i < N; ++i) cout << arr[i].age << " " << arr[i].name << '\n';
}
설명
- sort() : 동일한 값의 요소들에 대해, 두 요소가 기존에 가지고 있던 순서를 보장하지 않는다.
따라서 입력받은 순서를 기억해서 따로 정렬해야한다.(정렬 속도 상대적으로 빠름) - stable_sort() : 동일한 값의 요소들에 대해, 두 요소가 기존에 가지고 있던 순서를 보장한다.
따라서 입력받은 순서를 기억하고 따로 정렬할 필요가 없다. (정렬 속도 상대적으로 느림)
'자료구조 & 알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 13단계 - 18870번 문제 (좌표 압축) (0) | 2023.07.19 |
---|---|
[C++] 백준 13단계 - 11651번 문제 (좌표 정렬하기 2) (0) | 2023.07.19 |
[C++] 백준 13단계 - 11650번 문제 (좌표 정렬하기) (0) | 2023.07.18 |
[C++] 백준 10867번 문제 (중복 빼고 정렬하기) (0) | 2023.07.17 |
[C++] 백준 13단계 - 1427번 문제 (소트인사이드) (0) | 2023.07.16 |