알고리즘/백준

백준 11650_좌표 정렬하기

래울 2020. 11. 1. 19:23

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

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

 

좌표 정렬 하는 문제이다.

#include <stdio.h>
int main()
{
        int N;
        scanf("%d", &N);
        int arr[N][2];
        int i,j;
        for(i=0; i<N; i++)
                scanf("%d %d", &arr[i][0], &arr[i][1]);
        int min_index=0;
        int tx, ty;
        for(i=0; i<N; i++){
                min_index=i;
                for(j=i; j<N; j++){
                        if(arr[min_index][0] > arr[j][0]){
                                min_index=j;
                        }
                        else if(arr[min_index][0] == arr[j][0]){
                                if(arr[min_index][1] > arr[j][1])
                                        min_index=j;
                        }
                }
                tx = arr[i][0];
                ty = arr[i][1];
                arr[i][0] = arr[min_index][0];
                arr[i][1] = arr[min_index][1];
                arr[min_index][0] = tx;
                arr[min_index][1] = ty;

                //for(j=0; j<N; j++)
                //      printf("%d. %d %d \n",i,arr[j][0],arr[j][1]);

        }
        for(i=0; i<N; i++)
                printf("%d %d\n", arr[i][0], arr[i][1]);
        return 0;
}

처음에 위와 같이 그냥 c 선택정렬로 했더니, 시간 초과 ;....

크기가 100000이라 O(n^2)이면 시간초과가 난다.

 

따라서, quick sort를 이용하거나, c++에서 #include <algorithm> 로 sort()함수등을 사용해서 해결가능하다.

 

quick sort : O(n*logn)