백준(BaekJoon)

[BaekJoon/C] No.11651 : 좌표 정렬하기 2

ekdnjs510 2024. 8. 20. 21:39
728x90

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

No. 11651 문제

 

문제해석

 

1) 좌표의 개수와 좌표의 값을 입력받습니다.

2) 입력한 좌표의 값을 차례로 저장하며 qsort함수에서 사용할 함수 compare을 정의해주어 좌표의 값을 비교합니다.

3) compare 함수를 기준으로 정렬된 좌표를 출력합니다.

 

여기서 핵심은 퀵정렬 함수인 qsort를 사용하는 것입니다.

qsort에서 사용할 함수를 정의할 때 반환하는 값을 통해 정렬이 됩니다.

 

소스코드 & 문제풀이

 

#include<stdio.h>
#include<stdlib.h>

// 구조체(좌표 x와 y)를 사용해 연관된 변수를 묶어줍니다
typedef struct coord {
	int x;
	int y;
} coord;

// qsort에서 사용할 비교함수를 선언합니다
int compare(const void* a, const void* b)
{
	coord A = *(coord*)a;
	coord B = *(coord*)b;

	
	if (A.y < B.y) return -1; // A.y가 B.y보다 작으면 -1을 반환하여 A가 B보다 앞에 오도록 합니다
	else if (A.y == B.y) { // 만약 y의 값이 같다면 x좌표를 기준으로 오름차순 정렬합니다
		if (A.x < B.x) return -1;
		else return 1; 
	}
	else return 1; // 그렇지 않으면 1을 반환하여 B가 A보다 앞에 오도록 합니다
	return 0;
}

int main() {
	int N;
	scanf("%d", &N); // 점의 개수를 입력받습니다
	coord p[N]; // 점들의 좌표를 저장합니다

	int i = 0;

	while (i < N) { // 점의 개수만큼 반복하며 배열에 저장합니다
		scanf("%d %d", &p[i].x, &p[i].y);
		i++;
	}

	// qsort 함수를 사용해 배열에 저장된 점들을 compare 함수를 기준으로 정렬합니다
	qsort(p,N, sizeof(coord), compare); 
	i = 0;

	while (i < N) { // 정렬이 완료된 후, 다시 각 점의 좌표를 출력합니다
		printf("%d %d\n", p[i].x, p[i].y);
		i++;
	}

	return 0;
}

 

 

제 입출력 결과

 

 

 

 

 

 


 

qsort 참고 사이트

 

 

https://twpower.github.io/56-qsort-in-c

 

[C] C언어에서 qsort 사용하기

Practice makes perfect!

twpower.github.io

https://blog.naver.com/ygs1090/223105957292

 

(C언어) qsort 함수로 숫자, 문자열 정렬하기

오늘은 qsort함수에 대해 알아보도록 합시다. qsort는 C언어에서 제공하는 정렬 라이브러리 함수입니다. ...

blog.naver.com

 

728x90