백준 algorithm

백준 11650 - 좌표 정렬하기

cosmohoo 2020. 7. 23. 19:32
반응형

문제 설명

 

 

=> pair와 sort 함수를 사용할 줄 아는지 묻는 문제입니다. 

=> x좌표와 y좌표는 같이 움직여야하는 하나의 객체이므로, 클래스로 표현하여도 되지만, 이미 c++ 에는 pair가 있습니다. 

=> pair를 사용해서 푸시면 훨씬 간단하게 해결이 가능합니다. 

 

 

  • x좌표와 y좌표를 입력받은 후 pair를 작성한 후, vector에 삽입한다. 
  • 문제에 주어진대로, x좌표를 먼저 비교하고, y좌표를 비교하여 정렬시킨다. 

 

 

 

<sort> 

bool cmp(const pair<int, int> &a, const pair<int, int> &b)
{
   if (a.first == b.first) {
        return a.second < b.second;
    }
    else {
        return a.first < b.first;
    }
}

 

=>x좌표가 같으면 y좌표를 확인하는 비교 함수 

https://codingham.tistory.com/185

 

pair형 vector 정렬하기 / vector<pair< a,="" b="">> sort /compare, greater, less</pair<>

알고리즘 문제를 풀다 보면 언어에 이미 구현되어있는 헤더를 사용하면 편한 것이 많습니다. 그중 많이 쓰이는 것이 pair와 vector입니다. 이 두가지를 혼용할 경우, 정렬해야 할 경우가 심심치 않�

codingham.tistory.com

=> pair 형 vector를 정렬하는 방법입니다. 한번 확인하시면 좋습니다. 

 

 

 

 

 

 

 

<code>

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


using namespace std;

bool cmp(const pair<int, int> &a, const pair<int, int> &b)
{
   if (a.first == b.first) {
        return a.second < b.second;
    }
    else {
        return a.first < b.first;
    }
}


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
   
    int N;
    cin >> N;
    vector<pair<int, int>> arr;
    
    for(int i=0; i<N; i++)
    {
        int x,y;
        cin >> x;
        cin >> y;
        
        pair<int, int> tmp = make_pair(x, y);
        arr.push_back(tmp);
    }
    
    sort(arr.begin(), arr.end(), cmp);
    
    for(int i=0; i<arr.size(); i++)
    {
        cout << arr[i].first<<" "<<arr[i].second <<'\n';
    }
    return 0;
}

 

 

 

 

 

실행 화면 

반응형