2차원 평면 위의 점 N개가 주어지고, 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 문제이다.
vector<pair<int, int>>와 sort함수를 통해 오름차순 정렬을 진행한다.
pair 구조체는 operator<가 내부적으로 알아서 구현되어 있다.
lhs.first < rhs.first;
lhs.second < rhs.second;
직접 구현할 수 있지만 STL을 사용하면 제공된 기능만으로도 정답을 구현할 수 있다.
// 아래의 코드는 dev c++환경에서 동작됩니다.
// visual studio에서는 bit/stdc++.h가 기본적으로 없기 때문에
// 정삭적인 작동이 되지 않을 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
int n, y, x;
vector<pair<int, int> > v;
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> x >> y;
v.push_back({x, y});
}
sort(v.begin(), v.end());
for(auto& val : v) cout << val.first << " " << val.second << "\\n";
return 0;
}
처음에는 pair구조체의 <연산자 오버로딩이 어떻게 되어있는지 몰라서, 내가 직접 비교함수를 구현했다. 다른 많은글에서도 그랬듯이 몰라서 추가적으로 구현한 것들이 참 많았고, 이번 문제도 그랬다. 그래도 이제는 pair구조체의 <연산자가 어떻게 구현되어있는지 알았으므로, 앞으로 두 값을 순서대로 오름차순 정렬하는 문제에서는 pair 구조체를 통해 문제를 해결할 것이다.