Baekjoon Review

[Silver 5] 11650번 좌표 정렬하기

hanseongbugi 2023. 10. 13. 20:24

https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

이 문제는 배열에 값을 삽입하고 정렬하면 해결할 수 있다.

이때 배열의 요소에 좌표를 삽입해야한다.

이를 위해 Point라는 class를 선언하여 배열의 요소로 사용하였다.

x 좌표가 같으면 y 좌표를 기준으로 내림차순으로 정렬하고, x 좌표가 다르면 x 좌표를 기준으로 내림차순으로 정렬한다.

 

#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 bigger(Point a, Point b){
    if(a.x==b.x)return a.y < b.y;
    else return a.x < b.x;
}
int main(){
    int N;
    cin>>N;
    vector<Point> arr;
    for(int i = 0;i<N;i++){
        int x,y;
        cin>>x>>y;
        arr.emplace_back(x,y);
    }
    sort(arr.begin(),arr.end(),bigger);
    for(int i = 0;i<arr.size();i++)
        cout<<arr[i].x<<' '<<arr[i].y<<'\n';
}