본문 바로가기

Beakjoon/else

[백준] 11650 좌표 정렬하기 (C++) - sort, compare, pair

문제

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

코드

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

using namespace std;

bool compare(pair<int,int> p1, pair<int,int> p2){
  if(p1.second == p2.second){
    return p1.first < p2.first;
  }
  return p1.second < p2.second;
}

int main(){
  int n;
  vector<pair<int, int>> v;

  cin >> n;

  for(int i=0; i<n; i++){
    int x, y;
    cin >> x >> y;
    v.push_back(make_pair(x, y));
  }

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

  for(pair<int, int> p : v){
    cout << p.first << ' ' << p.second << '\n';
  }

  return 0;
}

정리

pair, sort, sort의 compare함수를 이용해서 풀 수 있는 문제이다.

pair와 compare함수를 같이 사용해서 문제를 해결하는 방법은 이 문제 외에도 다른 문제들에서도 많이 쓰일 듯 하다.

참조

https://kdongree.tistory.com/24

https://kdongree.tistory.com/26