https://www.acmicpc.net/problem/11650
방법 1: pair로 펑터없이 정렬
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 입력
int N;
cin >> N;
vector<pair<int, int>> v(N);
for (int i = 0; i < N; ++i)
{
cin >> v[i].first >> v[i].second;
}
// 오름차순 정렬
sort(v.begin(), v.end());
// 출력
for (int i = 0; i < N; ++i)
{
cout << v[i].first << ' ' << v[i].second << '\n';
}
return 0;
}
방법 2: 사용자 정의 자료형의 < 연산자 오버로딩을 통한 정렬
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct point {
int x, y;
// < 연산자 오버로딩 : x 오름차순, y 오름차순
bool operator <(const point& p) const
{
if (x != p.x)
{
return x < p.x;
}
return y < p.y;
}
};
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// 입력
int N;
cin >> N;
vector<point> v(N);
for (int i = 0; i < N; ++i)
{
cin >> v[i].x >> v[i].y;
}
// 연산자 오버로딩된 point벡터를 정렬
sort(v.begin(), v.end());
// 출력
for (int i = 0; i < N; ++i)
{
cout << v[i].x << ' ' << v[i].y << '\n';
}
return 0;
}
방법1
pair자료형을 쓰면 별다른 펑터 없이 그냥 sort()만으로 오름차순 정렬이 된다.
하지만 사용자 정의 자료형을 쓰면 따로 사용자 정의 펑터를 만들어주어야 한다.
방법2
사용자 정의 자료형에서 연산자를 오버로딩하여 정렬할 수도 있다.
이 방법이 방법1보다 빨랐다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ]10825번: 국영수 (c++) (0) | 2020.07.06 |
---|---|
[BOJ]10814번: 나이순 정렬 (c++) (0) | 2020.07.06 |
[BOJ]11651번: 좌표 정렬하기 2 (c++) (0) | 2020.07.06 |
[BOJ]2873번: 롤러코스터 (c++) (0) | 2020.06.27 |
[BOJ]1201번: NMK (c++) (0) | 2020.06.27 |
댓글