문제 링크: https://www.acmicpc.net/problem/10814
회원들을 나이 오름차순으로 정렬하는 것이 목표입니다. 나이가 같으면 먼저 가입한 사람이 앞에 오는 순으로 정렬하는데, 정렬할 때 미리 인덱스를 저장해놔서 인덱스를 비교하거나, 아니면 stable sort를 사용하면 되겠습니다.
std::sort
는 unstable sort이기 때문에 std::stable_sort
또는 stable한 정렬방법을 사용해야 합니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
int n;
cin >> n;
vector<pair<int, string>> persons(n);
for (auto& [age, name] : persons) {
cin >> age >> name;
}
stable_sort(persons.begin(), persons.end(), [](auto& p1, auto& p2) {
return p1.first < p2.first;
});
for (auto& [age, name] : persons) {
cout << age << ' ' << name << '\n';
}
return 0;
}
STL의 stable sort를 쓴 버전입니다. 메모리가 추가로 좀 들어갑니다.
std::stable_sort § Notes
This function attempts to allocate a temporary buffer equal in size to the sequence to be sorted. If the allocation fails, the less efficient algorithm is chosen.
stable_sort의 레퍼런스 항목을 읽어보면 메모리 할당을 시도해보고, 메모리 할당이 되면 좀 더 효율적인 방법(O(NlogN))으로 정렬하고, 할당이 안되면 덜 효율적인 방법(O(Nlog(N^2)))이 사용된다네요.
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 7785: 회사에 있는 사람 (0) | 2020.07.06 |
---|---|
[백준][C++] 1389: 케빈 베이컨의 6단계 법칙 (0) | 2020.07.06 |
[백준][C++] 3107: IPv6 (0) | 2020.07.06 |
[백준][C++] 2671: 잠수함식별 (0) | 2020.07.05 |
[백준][C++] 2866: 문자열 잘라내기 (0) | 2020.07.04 |