[백준] 11650 좌표 정렬하기 (C++)
11650 | 좌표 정렬하기
🙋♀️ 문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
🙌 입출력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
🙋♂️ 예제 입출력
5
3 4
1 1
1 -1
2 2
3 3
1 -1
1 1
2 2
3 3
3 4
🚀 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class point {
public:
int x;
int y;
point(int _x, int _y) {
x = _x;
y = _y;
}
};
bool compare(point &a, point &b) {
if (a.x < b.x) {
return true;
}
else if (a.x == b.x) {
if (a.y < b.y) {
return true;
}
else return false;
}
else return false;
}
int main() {
int n;
cin >> n;
int x, y = 0;
vector<point> v;
for (int i = 0; i < n; i++) {
cin >> x >> y;
v.push_back(point(x, y));
}
sort(v.begin(), v.end(), compare);
for (int i = 0; i < n; i++) {
cout << v[i].x << ' ' << v[i].y << '\n';
}
return 0;
}
🌠 메모
algorithm
의 sort()
를 사용하니 문제가 금방 풀렸다.
점 x, y를 담을 클래스 point를 선언하고, 생성자를 정의한 뒤, point를 vector에 담는다. 이후 compare
함수를 작성해, x가 증가하는 순으로 좌표가 같을때는 y가 증가하는 순으로 정렬될 수 있게 했다.
📌 11651번인 좌표 정렬하기2 문제는 위의 코드에서 compare함수의 x와 y의 순서만 바꿔주면 된다.
# 카테고리
- BOJ 36
- Algorithm 12
- CodingTest 11
- Web 9
- Javascript 8
- Vue 7
- React 7
- DBProject 4
- Python 3
- Tech-interview 3
- Express 3
- Next 3
- Github 2
- Django 2
- C 1
- C++ 1
- WebGame 1