[백준] 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;
}

따로 비교할 수 있는 변수로 하나의 상수로 통일하여 함수화 하면 되겠다고 생각만 들었지

이렇게 코드로 직접 사용해보니 좀 더 머리속에 구체화 되어 다음엔 더 잘 사용 할 수 있을거라 생각이든다.