본문 바로가기

Coding

[C++]백준 11651번: 좌표 정렬하기 2

728x90
문제

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

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

 

문제이해

  • 첫째 줄에 N을 입력합니다.
  • 두 번째 줄부터 N개의 좌표(x, y)를 입력합니다.
  • 좌표를 기준에 맞게 정렬하여 출력합니다.

우선 좌표를 정렬하는 기준은 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순으로 되어있습니다. vector <pair <int, int>>x좌표와 y좌표를 저장하고 algorithmsort를 이용하여 정렬한 후 출력해 주면 끝입니다.

 

문제풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<pair<int, int>> elements;

bool compare(pair<int, int>& A, pair<int, int>& B) {
    if (A.second != B.second) {
        return A.second < B.second;
    }
    else {
        return A.first < B.first;
    }
}

int main() {
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);
    int T, x, y;
    cin >> T;
    while (T--) {
        cin >> x >> y;
        elements.push_back(make_pair(x, y));
    }
    sort(elements.begin(), elements.end(), compare);
    for (int i{ 0 }; i < elements.size(); i++) {
        cout << elements[i].first << " " << elements[i].second << "\n";
    }
}
bool compare

해당 함수를 통해 문제에 주어진 기준에 맞는 정렬 규칙을 정해주었습니다. firstx 좌표를 의미하고 secondy 좌표를 의미합니다. y 좌표가 다를 경우에는 y에 대해 오름차순으로 y 좌표가 같을 경우에는 x에 대해 오름차순으로 정렬해 주면 됩니다.

 

문제후기

sort를 이용할줄만 안다면 매우 쉽게 풀 수 있는 문제였습니다.

728x90