관리 메뉴

Storage Gonie

(2) [C++] 백준 No.11650 : 좌표 정렬하기 본문

알고리즘/백준풀이8. 정렬

(2) [C++] 백준 No.11650 : 좌표 정렬하기

Storage Gonie 2019. 5. 14. 18:55
반응형

문제

풀이

자세한 풀이 : 

 

# C++(pair, vector, sort 이용)

- 이 문제에서 가장 간편한 방법

#include <iostream>
#include <utility>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int T;
    cin >> T;
    vector<pair<int, int>> vec(T);

    for (int i = 0; i < T; i++)
        cin >> vec[i].first >> vec[i].second;

    sort(vec.begin(), vec.end());

    for(int i = 0; i < T; i++)
        cout << vec[i].first << " " << vec[i].second << "\n";
}

# C++(구조체, vector, sort, 사용자정의 비교함수)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Point{
    int x, y;
};

bool cmp (const Point &u, const Point &v){
    if (u.x < v.x)
        return true;

    else if (u.x == v.x)
        return u.y < v.y;

    else
        return false;
}

int main()
{
    int T;
    cin >> T;

    vector<Point> vec(T);

    for (int i = 0; i < T; i++)
        cin >> vec[i].x >> vec[i].y;
    
    sort(vec.begin(), vec.end(), cmp);

    for (int i = 0; i < T; i++)
        cout << vec[i].x << " " << vec[i].y << "\n";
}

# C++(구조체, vector, sort, 연산자 오버로딩)

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Point{
    int x, y;

    bool operator < (const Point &v) const{       // const 안붙여주면 에러난다.
        if (x < v.x)
            return true;
        else if(x == v.x)
            return y < v.y;
        else
            return false;
    }
};

int main()
{
    int T;
    cin >> T;

    vector<Point> vec(T);

    for (int i = 0; i < T; i++)
        cin >> vec[i].x >> vec[i].y;
    
    sort(vec.begin(), vec.end());     // 알아서 오버로딩 해준 연산자가 사용되어 정렬된다.

    for (int i = 0; i < T; i++)
        cout << vec[i].x << " " << vec[i].y << "\n";
}

# C++(구조체, vector, sort, 사용자정의 람다함수)

- 람다함수는 C++11부터 사용가능

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Point{
    int x, y;
};

int main()
{
    int T;
    cin >> T;

    vector<Point> vec(T);

    for (int i = 0; i < T; i++)
        cin >> vec[i].x >> vec[i].y;
    
    sort(vec.begin(), vec.end(), [](Point &u, Point &v)->bool{
        if (u.x < v.x)
            return true;
        else if(u.x == v.x)
            return u.y < v.y;
        else
            return false;
        });

    for (int i = 0; i < T; i++)
        cout << vec[i].x << " " << vec[i].y << "\n";
}

 

반응형
Comments