https://www.acmicpc.net/problem/11651
문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
예제 입력 1
5
0 4
1 2
1 -1
2 2
3 3
예제 출력 1
1 -1
1 2
2 2
3 3
0 4
풀이
좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬하는 문제이다.
좌표는 벡터에 pair<int,int>로 관리해주었고 정렬 조건을 구현한 compare 함수를 만들어주었다.
좌표의 두번째, 즉 y좌표가 같다면 x좌표가 작은 순서대로, 아니라면 y좌표가 작은 순서대로 정렬을 시켜준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
using namespace std;
bool compare(pair<int, int>a, pair<int, int>b) {
if (a.second == b.second) {
return a.first < b.first;
}
else {
return a.second < b.second;
}
}
int main(){
int N,x,y;
vector<pair<int, int> > v;
scanf("%d", &N);
for(int i=0; i<N; i++){
scanf("%d %d", &x,&y);
v.push_back(make_pair(x,y));
}
sort(v.begin(),v.end(),compare);
for(int i=0; i<N; i++)
printf("%d %d\n", v[i].first,v[i].second);
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'C++ > 백준' 카테고리의 다른 글
[C++][백준][DFS/BFS] 14502 연구소 (0) | 2020.03.12 |
---|---|
[C++][백준][DFS/BFS] 11724 연결 요소의 개수 (0) | 2020.03.12 |
[C++][백준][정렬] 11652 카드 (0) | 2020.03.12 |
[C++][백준][정렬] 11650 좌표 정렬하기 (0) | 2020.03.12 |
[C++][백준][DFS/BFS] 11403 경로 찾기 (0) | 2020.03.12 |