문제설명

 

소스코드

#include <iostream>
#include <algorithm>
using namespace std;
class XY {
public:
	int x; int y;
	bool operator < (XY& arr) { 
		if (this->y < arr.y) return true;
		else
		{
			if ((this->y == arr.y) && (this->x < arr.x)) return true;
			else return false;
		}
	}
};
int main() {
	ios_base::sync_with_stdio(false); //표준 스트림 동기화 해제
	cin.tie(NULL); //입력과 출력 연결 끊기
	int N;
	cin >> N;
	XY* arr = new XY[N];
	for (int i = 0; i < N; ++i) cin >> arr[i].x >> arr[i].y;
	sort(arr, arr + N);
	for (int i = 0; i < N; ++i) cout << arr[i].x << " " << arr[i].y << '\n';
}

 

설명

  • 클래스 배열로 좌표를 나타냄
  • algorithm 라이브러리의 sort() 함수를 올바르게 실행하려면 클래스 내부의 연산자 < 의 재정의(오버라이딩)가 필요함
  • y좌표가 작으면 무조건 true를 리턴하고(오름차순)
    y좌표가 같고 x가 작으면 true를 리턴한다(오름차순)
    이외의 경우는 false를 리턴한다
  • 표준 스트림 동기화 해제, 입출력 연결 끊기, endl 대신 '\n'을 사용하여 시간초과를 방지를 한다.