[C++] 백준 11650 좌표 정렬하기
2021. 2. 27.
반응형

www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

1. 서론

 

정말 쉽다... 정렬만 잘하면 된다. 문제 읽고 코드 치는 데까지 7분 걸린 듯

 

2. 문제 풀이

 

여러 좌표들이 주어지는데 그 좌표를 x좌표가 증가하는 순서대로 정렬한다. 만약 x좌표가 같은 경우애는 y좌표가 증가하는 순서대로 정렬한다.

평범한 정렬 문제다. compare만 잘 적을 줄 알면 된다. compare에서 말 그대로 x좌표가 더 큰 순서대로 정렬하고 x값이 같은 경우 y좌표가 더 큰 순서대로 정렬하게 하면 된다.

 

3. 코드 설명

 

#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(pair<int, int> a, pair<int, int> b)
{
    if (a.first == b.first) return a.second < b.second;
    else return a.first < b.first;
}

int main()
{
    int n, i, x, y;
    vector<pair<int, int>> v;

    scanf("%d", &n);

    for (i = 0; i < n; i++)
    {
        scanf("%d %d", &x, &y);
        v.push_back(make_pair(x, y));
    }

    sort(v.begin(), v.end(), compare);

     for (i = 0; i < n; i++)
         printf("%d %d\n", v[i].first,  v[i].second);
}

 

pair로 x와 y좌표 값을 받는다. 

그리고 정렬하는데 정렬 시에 compare를 정의해서 오름차순으로 정렬할 수 있게 조건을 걸어준다.

first값이 x고 second 값이 y니까 first를 기준으로 정렬하고 만약 first가 같은 경우 second를 기준으로 정렬하게 해 줬다.

그리고 시간 초과 때문에 scanf, printf를 썼다.

 

 

 

반응형

'Algorithm' 카테고리의 다른 글

[C++] 백준 2003 수들의 합 2  (0) 2021.03.10
[C++] 백준 10989 수 정렬하기 3  (0) 2021.03.01
[C++] 백준 10814 나이순 정렬  (0) 2021.02.27
[C++] 백준 1427 소트인사이드  (0) 2021.02.27
[C++] 백준 1920 수 찾기  (0) 2021.02.22
myoskin