📌 백준 11650 좌표 정렬하기
https://www.acmicpc.net/problem/11650
좌표를 입력 받고 배열에 저장한 후 정렬해서 출력하는 문제이다.
구조체를 만들고 멤버 변수로 x, y 좌표를 정의했다.
이 문제에서 주목할 부분은 바로
x좌표가 같으면 y좌표가 증가하는 순서로 정렬한다는 것이다.
나는 배열 원소들의 정렬을 위해 sort()를 썼는데,
이 sort()에는 주의할 점이 있다.
우선 sort()는 3개의 매개변수를 가진다.
sort(A, B, 함수명)
A는 배열의 시작 주소, B는 배열의 끝 주소다. 함수명에는 배열의 원소들을 비교하기 위한 함수의 이름만 적어준다. 파라미터까지 적어줄 필요 없다.
sort()함수에 대한 자세한 건 여기에 정리했다.
여기서 sort(A,B) 같이 매개변수 2개만 있는 경우도 본 적이 있다.
이 때는 디폴트 값으로 오름차순으로 정렬한다는 뜻이다.
sort()의 비교함수(compare())가 true를 리턴하면 자리를 바꾸고,
false를 리턴하면 자리를 바꾸지 않는다.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct position
{
int x, y;
};
bool compare(position now, position last)
{
if (now.x > last.x) return false;
if (now.x == last.x && now.y > last.y) return false;
else return true;
}
int main()
{
int N;
scanf("%d", &N);
struct position arr[100001];
for (int i = 0; i < N; i++)
{
scanf("%d %d", &arr[i].x, &arr[i].y);
}
//정렬
sort(arr, arr + N, compare);
for (int i = 0; i <N; i++)
printf("%d %d\n", arr[i].x, arr[i].y);
}