11650 : 좌표 정렬하기

서희찬·2021년 9월 12일
0

백준

목록 보기
22/105

문제

코드

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

typedef struct _point{
    int x;
    int y;
}Point;

void MergeTwoArea(Point*arr,int left, int mid, int right);
void MergeSort(Point*arr,int left,int right);


int main(void)
{
    int num;
    scanf("%d",&num);
    
    //구조체 변수 동적할당
    Point*arr =(Point*)malloc(sizeof(Point)*num);
    for(int i=0;i<num;i++)
    {
        scanf("%d %d",&arr[i].x,&arr[i].y); //할당받은 배열에 삽입
    }
    //정렬
    MergeSort(arr, 0, num-1);
    //출력
    for(int i=0;i<num;i++){
        printf("%d %d \n",arr[i].x,arr[i].y);
    }
    
    free(arr); // 동적할당해제
    
    return 0;
}
void MergeTwoArea(Point*arr,int left, int mid, int right)
{
    int fIdx = left;
    int rIdx = mid + 1;
    int i;

    Point * sortArr = (Point*)malloc(sizeof(Point)*(right+1)); // 임시 구조체 배열 생성
    int sIdx = left;

    while(fIdx<=mid && rIdx <= right)
    {
        if(arr[fIdx].x<arr[rIdx].x)
            sortArr[sIdx] = arr[fIdx++];
        else if(arr[fIdx].x>arr[rIdx].x)
            sortArr[sIdx] = arr[rIdx++];
        else
        {
            if(arr[fIdx].y<arr[rIdx].y)
                sortArr[sIdx] = arr[fIdx++];
            else
                sortArr[sIdx] = arr[rIdx++];
        }
        sIdx++;
    }

    if(fIdx>mid)
    {
        for(i=rIdx;i<=right;i++,sIdx++)
            sortArr[sIdx]=arr[i];
    }
    else
    {
        for(i=fIdx;i<=mid;i++,sIdx++)
            sortArr[sIdx]=arr[i];
    }
    for(i=left;i<=right;i++)
        arr[i] = sortArr[i];

    free(sortArr); //해제
}


void MergeSort(Point*arr,int left,int right)
{
    int mid;

    if(left<right)
    {
        //check mid
        mid = (left+right)/2;

        // Divide
        MergeSort(arr, left, mid);
        MergeSort(arr, mid+1, right);

        //Merge
        MergeTwoArea(arr, left, mid, right);
    }
}

해설

드디어 .. ! 구조체 쓰는 문제가 나왔다 !
구조체 몇만년만이냥 진짜~!~
그건 그렇고 파이썬하다가 씨하니깐 뭔가 더 근-본 느낌이 생긴다..!
파이썬에서는 쏠트! 하면 끝이였는뎅 헤헤...

접근

우선 구조체에 x,y좌표를 넣을 수 있게 맴버 변수를 만들어 주고 main함수에서 구조체 배열을 동적할당을 해줬다 !
그 후 num만큼의 구조체 배열에 수를 입력받고
조건에 맞게 정렬한 후에 출력해주고 구조체 동적할당해제 해주면 되겠다 생각했다

정렬 방법으로는 앞서 사용해봤던 병합정렬을 수정해서 활용하였다!
기존에 짜여진 코드를 원하는 맛대로 수정해서 사용하는것이 중요하다고 윤성우선생님께 배웠으니..! 내가 원하는대로 수정해서 사용했다

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글