입력값으로 나이와 이름이 입력된다.
나이순, 입력순으로 정렬 후 나이와 이름을 출력하는 문제이다.
// 아래의 코드는 dev c++환경에서 동작됩니다.
// visual studio에서는 bit/stdc++.h가 기본적으로 없기 때문에
// 정삭적인 작동이 되지 않을 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
int n, age;
string name;
vector<pair<int, string>> v;
bool comp(const pair<int, string>& lhs, const pair<int, string>& rhs)
{
return lhs.first < rhs.first;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for(int i = 0; i < n ; i++)
{
cin >> age >> name;
v.push_back({age, name});
}
stable_sort(v.begin(), v.end(), comp);
for(const pair<int, string>& val : v) cout << val.first << " " << val.second << "\\n";
return 0;
}
처음에는 익숙한 sort함수를 사용해 구현했고, 입력순을 위한 별도의 변수를 마련했다. 정답을 제출 후 다른 사람들이 어떻게 구현했는지 확인해보니 stable_sort를 통해 아주 쉽게 문제를 해결한 것을 알게되었다.
역시 아는 게 힘이라고, 많은 알고리즘과 그 특성들을 익히는 것이 정답이라고 생각한다. 앞으로 입력순을 보장해야 한다는 조건이 나온다면 stable_sort를 자주 애용할 것 같다.