728x90
https://www.acmicpc.net/problem/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
https://blog.naver.com/ygs1090/223105957292
728x90
'백준(BaekJoon)' 카테고리의 다른 글
[BaekJoon/C] No.11729 : 하노이 탑 이동 순서 (0) | 2024.08.29 |
---|---|
[BaekJoon/C] No.27433 : 팩토리얼 2 (0) | 2024.08.29 |
[BaekJoon/C] No.25305 : 커트라인 (0) | 2024.08.20 |
[BaekJoon/C] No.18870 : 좌표 압축 (0) | 2024.08.14 |
[BaekJoon/C] No.10814 : 나이순 정렬 (0) | 2024.08.14 |