[Baekjoon] 11650 좌표 정렬하기
알고리즘 분류
정렬
문제 - https://www.acmicpc.net/problem/11650
-문제-
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
-해결방법-
배열 대신 vector 자료 유형을 써서 해결하도록 합니다.pair<int, int>형을 이용하여 첫번째(x좌표)가 작은 순서 부터 정렬하도록 한다. x좌표가 같을 때에는 두번째(y좌표)가 작은 순서 부터 정렬합니다. <algorithm>헤더파일에 있는 sort()를 쓰는데 사용자 정의 함수 comp()를 활용하여 정렬합니다.
pair<int,int> 자료형 일 때 정렬하는 compare()를 정확히 알아두자!
<소스코드>
#include <iostream> #include <cstdio> #include <vector> #include <algorithm> using namespace std; bool comp(const pair<int,int> &a, pair<int, int> &b) { //함수 인자 중요! if (a.first == b.first) return a.second < b.second; else return a.first < b.first; } int main() { vector<pair<int, int>> v; int N; scanf("%d", &N); int x, y; for (int i = 0; i < N; i++) { scanf("%d %d", &x, &y); v.push_back(make_pair(x, y)); } sort(v.begin(), v.end(), comp); for (int i = 0; i < N; i++) { printf("%d %d\n", v[i].first, v[i].second); } return 0; } |