[백준] 11650번 문제 - 좌표 정렬하기 - C언어(C11 C99)/동적메모리할당 + 내부정렬함수 + 구조체활용
2023. 11. 1. 13:46ㆍ프로그래밍/C
이번 문제를 통해 구조체를 이용하는법을 학습하였다.
"구조체" 활용은 단순한 코드작성연습을 끝내고 심화과정으로 넘어가는 경계에 있는 문법인것 같다.
코드를 작성할 때 동적으로 메모리 할당과 정렬함수는 지정하였는데
x,y좌표를 하나의 값으로 묶으면서 비교하는 방법을 몰랐다 그래서 찾아보니 구조체에 대하여 알게 되었고
typedef struct
{ ... } 변수명;
위 구문을 사용하여 비교구문에서 같이 사용하여 비교할 수 있게 되었다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int compare(const void* a, const void* b);
typedef struct
{
int x;
int y;
}point;
int main(void)
{
int i,n;
scanf("%d", &n);
point* arr = (point*)malloc(n * sizeof(point));
for (i = 0; i < n; i++) {
scanf("%d %d", &arr[i].x, &arr[i].y);
}
qsort(arr, n, sizeof(point), compare);
for (i = 0; i < n; i++) {
printf("%d %d\n", arr[i].x, arr[i].y);
}
free(arr);
return 0;
}
int compare(const void* a, const void* b) {
point A = *(point*)a;
point B = *(point*)b;
if (A.x > B.x)
return 1;
else if (A.x == B.x)
{
if (A.y > B.y)
return 1;
else
return -1;
}
else
return 0;
}
따로 비교할 수 있는 변수로 하나의 상수로 통일하여 함수화 하면 되겠다고 생각만 들었지
이렇게 코드로 직접 사용해보니 좀 더 머리속에 구체화 되어 다음엔 더 잘 사용 할 수 있을거라 생각이든다.
'프로그래밍 > C' 카테고리의 다른 글
[백준] 10809번 문제 - 알파벳 찾기 - C언어(C11 C99) (0) | 2023.11.03 |
---|---|
[백준] 2798번 문제 - 블랙잭 - C언어(C11 C99) (0) | 2023.11.03 |
[백준] 2751번 문제 - 수 정렬 하기 2 - C언어(C11 C99)/내장정렬함수qsort() (1) | 2023.10.31 |
알고리즘 학습 4문제 (2) | 2023.10.30 |
C언어_재귀 호출 (2) | 2023.10.18 |