본문 바로가기

C++/BAEKJOON

[C++] BAEKJOON (11651) 좌표 정렬하기 2

반응형

문제

2차원 평면 위의 점 N개가 주어진다.

좌표를 y좌표가 증가하는 순으로 정렬한 다음 출력하는 프로그램을 작성하시오.

(같은 y좌표끼리는 x좌표가 증가하는 순으로 정렬한다.)

 

첫째 줄에 점의 개수 N(1 ≤ N ≤ 100,000)이 주어진다.

둘째 줄부터 N번째 줄까지는 i 점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000)

단, 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

 

 

풀이

 

#include <iostream>
#include <vector>	// vector(), pair()
#include <algorithm>	// sort()

using namespace std;

bool compareFunction(pair<int, int> &x, pair<int, int> &y){	// sort 정렬 정의 함수
  if(x.second == y.second){	// 만약, pair x, y 구조체의 두번째 인자가 같다면,
    return x.first < y.first;	// pair x, y 구조체의 첫번째 인자를 비교한다.
    				// pair x의 첫번째 인자가 pair y의 첫번째 인자보다 작으면 swap 하지 않는다.
  }
  return x.second < y.second;	// pair x, y 구조체의 두번째 인자를 비교한다.
  				// pair x의 두번째 인자가 pair y의 두번째 인자보다 작으면 swap 하지 않는다.
}

int main(void){

  int N;
  cin >> N;	// test case 개수 입력

  vector<pair <int, int> > point;	// 크기가 가변적인 동적 배열 'point' 정의 및 두 객체를 한 묶음으로 저장
  int x, y;
  for(int i = 0; i < N; ++i){
    cin >> x >> y;			// 임의의 수 x, y 입력
    point.push_back(make_pair(x,y));	// point.push_back: vector point의 맨 뒤쪽에 pair 생성
   		 			// make_pair(x,y): x, y가 저장된 pair 생성
  }

  sort(point.begin(), point.end(), compareFunction);

  for(int i = 0; i < N; ++i){
    cout << point[i].first << " " << point[i].second << '\n';	// vector point에 저장된 인덱스 출력
  }

  return 0;
}

 

 

 

 

출처 : BAEKJOON

반응형

'C++ > BAEKJOON' 카테고리의 다른 글

[C++] BAEKJOON (2884) 알람 시계  (0) 2020.05.03
[C++] BAEKJOON (2753) 윤년  (0) 2020.05.03
[C++] BAEKJOON (2588) 곱셈  (0) 2020.04.28
[C++] BAEKJOON (10953) A+B - 6 ('scanf()'로 입력받기)  (0) 2020.01.25
[C++] BAEKJOON (2193) 이친수  (0) 2020.01.07