본문 바로가기

BAEKJOON/수학

백준 11650번 [좌표 정렬하기](C++)-yes6686- 티스토리

728x90
SMALL

백준 문제 풀이: 11650 [좌표 정렬하기]


문제 링크: https://www.acmicpc.net/problem/11650

문제 설명:

2차원 평면 위에 n개의 좌표가 주어집니다. x좌표가 증가하는 순으로 정렬하고, x좌표가 같으면 y좌표가 증가하는 순으로 정렬한 결과를 출력하는 문제입니다.


문제 해결 코드


#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

// 좌표를 저장할 벡터
vector<pair<int, int>> v;

// 정렬을 위한 비교 함수
bool compare(pair<int, int> a, pair<int, int> b) {
    if (a.first != b.first) {
        return a.first < b.first; // x좌표 오름차순
    } else {
        return a.second < b.second; // x좌표가 같으면 y좌표 오름차순
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    cin >> n;
    int x, y;

    // 좌표 입력
    for (int i = 0; i < n; i++) {
        cin >> x >> y;
        v.push_back(make_pair(x, y));
    }

    // 정렬 수행
    sort(v.begin(), v.end(), compare);

    // 결과 출력
    for (int i = 0; i < n; i++) {
        cout << v[i].first << ' ' << v[i].second << '\n';
    }
}

코드 설명

  • 핵심 알고리즘: STL의 sort 함수를 활용한 정렬
  • 구현 세부사항:
    • 입력 좌표를 pair 형태로 저장
    • 사용자 정의 비교 함수 compare를 통해 정렬 기준을 설정
    • 정렬 후 각 좌표를 순서대로 출력
  • 시간 복잡도: O(n log n)
    • STL sort 함수의 시간 복잡도

결과

주어진 n개의 좌표를 x좌표 오름차순, x좌표가 같으면 y좌표 오름차순으로 정렬하여 출력합니다. STL 정렬 함수와 비교 함수의 간단한 조합으로 효율적으로 문제를 해결할 수 있습니다.

다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!

728x90
LIST