본문 바로가기
개발/알고리즘 풀이...

[백준] 11650번 문제 풀이

by p_human 2021. 4. 11.

오랜만에 글을 쓴다.

 

문제

www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

설명

N개의 좌표(x, y)가 주어졌을 때 각 좌표를 다음과 같이 정렬해서 나타내는 문제

y의 좌표가 증가하는 순으로 정렬될 때 만약 y의 크기가 같다면 x의 크기가 증가하는 순으로 정렬

 

풀이

답은 간단하다. 11650번 문제를 풀었다면 쉽게 풀이를 생각할 수 있는 문제이다.

1. N개의 좌표를 입력받으면서 벡터에 저장한다.

2. 벡터를 위에 주어진 조건 그대로 정렬을 해주면 답이 된다.

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

bool compare(pair<int, int> p1, pair<int, int> p2) {
    if (p1.second == p2.second)
        return p1.first < p2.first;
    return p1.second < p2.second;
}

int main()
{
    int n, a, b;
    vector<pair<int, int> > vp;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a >> b;
        vp.push_back(make_pair(a, b));
    }
    sort(vp.begin(), vp.end(), compare);
    for (int i = 0; i < n; i++) cout << vp[i].first << " " << vp[i].second << "\n";
}

'개발 > 알고리즘 풀이...' 카테고리의 다른 글

[백준] 1012번 문제 풀이  (0) 2021.04.14
[백준] 2667번 문제 풀이  (0) 2021.04.12
[백준] 4949번 문제 풀이  (0) 2021.03.14
[백준] 1764번 문제 풀이  (0) 2021.03.14
[백준] 1181번 문제 풀이  (0) 2021.03.13