[백준 11650] 좌표 정렬하기 C언어

2024. 1. 24. 12:58코딩테스트/백준

문제

https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

코드

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
	int x;
	int y;
}Member;
int compare(const void* a, const void* b)
{
	int w = ((Member*)a)->x;
	int wy = ((Member*)a)->y;
	int z = ((Member*)b)->x;
	int zy = ((Member*)b)->y;

	if (w < z) // x값 비교
		return -1;
	else if (w == z) { // x값 같다면
		if (wy < zy) // y값 비교
			return -1;
		else // y값 비교
			return 1;
	}
	else // x값 비교
		return 1;
}
//int compare(const void* a, const void* b) // 이것도 가능함
//{
//	int diff = ((Member*)a)->x - ((Member*)b)->x;
//	return (diff != 0) ? diff : ((Member*)a)->y - ((Member*)b)->y; // x값의 차이가 있으면 그 차이를 반환하고, x값의 차이가 없으면 y값의 차이를 반환하라..
//}
int main(void)
{
	int n = 0;
	scanf("%d", &n);

	Member* m = (Member*)malloc(sizeof(Member) * n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &m[i].x);
		scanf("%d", &m[i].y);
	}

	qsort(m, n, sizeof(Member), compare);

	for (int i = 0; i < n; i++) {
		printf("%d %d\n", m[i].x, m[i].y);
	}

	free(m);
}