-
BOJ 11651: 좌표 정렬하기2알고리즘 2023. 5. 11. 21:45
#BOJ 11651: 좌표 정렬하기2
11651번: 좌표 정렬하기 2
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
#코드
#include<iostream> // #include<bits/stdc++.h> using namespace std; int n; pair<int, int> arr[100001]; pair<int, int>tmp[100001]; void merge(int st, int en, int k) { int mid = (st + en) / 2; int a = st; int b = mid; for (int i = st; i < en; i++) { if (a == mid) { tmp[i] = arr[b++]; } else if (b == en) { tmp[i] = arr[a++]; } else if (arr[a].first <= arr[b].first && k == 0) tmp[i] = arr[a++]; else if (arr[a].second <= arr[b].second && k == 1) tmp[i] = arr[a++]; else tmp[i] = arr[b++]; } for (int i = st; i < en; i++) arr[i] = tmp[i]; } void merge_sort(int st, int en, int k) { if (en - st == 1) return; int mid = (st + en) / 2; merge_sort(st, mid, k); merge_sort(mid, en, k); merge(st, en, k); } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 0; i < n; i++) cin >> arr[i].first >> arr[i].second; merge_sort(0, n, 0); // x 기준 정렬 merge_sort(0, n, 1); // y기준 정렬 for (int i = 0; i < n; i++) cout << arr[i].first << ' ' << arr[i].second << '\n'; return 0; }
'알고리즘' 카테고리의 다른 글
BOJ 5648: 역원소 정렬 (0) 2023.05.15 BOJ 11652: 카드 (0) 2023.05.15 BOJ 11650: 좌표 정렬하기 (0) 2023.05.11 BOJ 10814: 나이순 정렬 (0) 2023.05.11 BOJ 10989: 수 정렬하기 3 (0) 2023.05.11