[C++] 백준 11650 : 좌표 정렬하기

wldud·2024년 5월 6일
1

알고리즘

목록 보기
1/34


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

문제 푼 시간 : 13분

생각 흐름

정렬 규칙

  • x 좌표가 증가하는 순으로 정렬
  • x 좌표가 같으면 y 좌표가 증가하는 순으로 정렬

=> pair을 사용하여 x,y 값을 vector에 저장한 후 sort를 사용하여 정렬해야겠다!

코드

#include <iostream>
#include <vector>
#include <algorithm>

using  namespace std;

//바교 함수
bool com(pair<int,int> p1, pair<int,int> p2){
    if(p1.first == p2.first)return p1.second < p2.second; //x좌표 비교 후 x좌표 같으면 y좌표 비교하여 정렬
    else return p1.first < p2.first;//x좌표 다르면 x좌표 기준으로 정렬
}

int main(void){
    int N; //점의 개수 입력
    cin>>N;
    vector<pair<int, int> > v; //점들 저장할 벡터
    for(int i=0;i<N;i++){
        int a,b;
        cin>>a>>b;
        v.push_back(make_pair(a,b)); //x,y좌표 벡터에 추가
    }
    
    //비교 함수를 이용하여 벡터 정렬
    sort(v.begin(),v.end(),com);

    for(int i=0;i<N;i++){
        cout<<v[i].first<<" "<<v[i].second<<'\n';
    }
}

이 문제를 기록하면서 알았는데 sort()함수는 기본적으로 pairfirst를 우선으로, 그 후에 second를 비교하므로 정렬하여서 별도의 비교함수를 구현하지 않아도 되었다..!

#include <iostream>
#include <vector>
#include <algorithm>

using  namespace std;

int main(void){
    int N;
    cin>>N;
    vector<pair<int, int> > v;
    for(int i=0;i<N;i++){
        int a,b;
        cin>>a>>b;
        v.push_back(make_pair(a,b));
    }

    sort(v.begin(),v.end());

    for(int i=0;i<N;i++){
        cout<<v[i].first<<" "<<v[i].second<<'\n';
    }
}

0개의 댓글