백준 11651번 좌표 정렬하기 2

#11651. 좌표 정렬하기 2

Problem

  • 2차원 평면 위의 점 N개
  • y좌표 증가 순으로 정렬
    • 같다면 x좌표 증가 순으로 정렬

즉, y좌표 오름차순(같다면 x좌표 오름차순)으로 정렬하는 문제이다.

Solution

  • 2차원 vector에 (y, x)를 담는다. → 정렬 때문
  • sort함수를 사용 (위 문제 조건처럼 정렬된다.)
  • 출력은 거꾸로 한다.

iostream 헤더 파일의 cin과 cout을 쓰면 시간초과 되기에 cstdio를 사용하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
vector<vector<int>> positions;
int main() {
int n, x, y;
scanf(" %d", &n);
positions.resize(n);
for(int i = 0; i < n; ++i) {
scanf(" %d %d", &x, &y);
positions[i].push_back(y);
positions[i].push_back(x);
}
sort(positions.begin(), positions.end());
for(auto v : positions) {
for(int i = v.size()-1; i >= 0; --i) {
printf("%d ", v[i]);
}
printf("\n");
}
return 0;
}

92ms가 상당히 빠른 것은 아니기에 다른 최적의 정렬 방법이 있을지도 모른다.