반응형
문제
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 |