algorithm/baekjoon

[Baekjoon] 11650 좌표 정렬하기

lionking_29 2018. 9. 20. 16:39

알고리즘 분류

정렬



문제 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;

}