초기 네이버 기록/알고리즘(C)

백준 c++1165번 좌표 정렬하기 2(sort 함수 응용)

뜨거운 개발자 2023. 1. 5. 00:56
#include<iostream>
#include<algorithm>
using namespace std;
typedef struct point
{
        int x;
        int y;
} mpoint;

//bool xcompare(mpoint a, mpoint b)
//{
//      return(a.x < b.x);
//}


bool ycompare(mpoint a, mpoint b)
{
        if (a.y < b.y)
                return true;
        else if (a.y == b.y)
        {
                if (a.x < b.x)
                        return (true);
        }
        return false;
}

int main()
{
        int point_num;
        cin >> point_num;
        mpoint * position = new mpoint [point_num];
        for (int i = 0; i < point_num; i++)
        {
                cin >> position[i].x >> position[i].y;
        }
//      sort(position, position + point_num, xcompare);
//      for (int i = 0; i < point_num; i++)
//              cout<< position[i].x<<"??? " << position[i].y << "\n";
        sort(position, position+ point_num, ycompare);
        for (int i = 0; i < point_num; i++)
                cout<< position[i].x<<" " << position[i].y << "\n";
}

sort 함수의 그동안 2번째 인자만 주고 사용했는데 3번째 인자로 함수를 만들어서 함수포인터를 전달하면 우리는 그 함수를 이용해 리턴값에 따라서 정렬을 할 수가 있다.

그 함수의 리턴값이 1일때는 우리는 따로 바꾸지 않고 리턴값이 0 즉 false 일때만 우리는 바꿔준다. 위의 경우는 구조체에서 값을 바꿔서 해결하였다.

 

728x90