[백준] 11650 좌표 정렬하기 C++ (정렬)

·2022년 3월 14일
0

백준

목록 보기
14/23
post-thumbnail

📌 백준 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);
}
profile
https://k-ang.tistory.com/ 이전했어요

0개의 댓글