오랜만에 글을 쓴다.
문제
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 |