https://www.acmicpc.net/problem/11650
좌표를 정렬하는 문제. x좌표 먼저 비교하고, 그다음 y좌표를 비교하자. 그리고 동적할당을 할때는 할당 해제하는 것도 잊지말자....
// C solution
#include <stdio.h>
#include <stdlib.h>
// 좌표 구조체
typedef struct {
int x;
int y;
}Pos;
// stdlib.h에 있는 qsort에 쓰기 위한 함수.
int compare (const void * ptr1, const void * ptr2) {
Pos * p1 = (Pos *)ptr1;
Pos * p2 = (Pos *)ptr2;
if (p1->x < p2->x) return -1; // p2의 x좌표가 더 크면 -1
else if (p1->x > p2->x) return 1; // 더 작으면 1
else { // x좌표가 같으면
if (p1->y < p2->y) return -1; // p2의 y좌표가 더 크면 -1
else if (p1->y > p2->y) return 1; // 더 작으면 1
}
return 0; // 모두 해당하지 않으면 0
}
int main () {
int n;
scanf("%d", &n);
Pos * arr = (Pos *)malloc(sizeof(Pos) * n);
for (int i = 0; i < n; i++)
scanf("%d %d", &arr[i].x, &arr[i].y);
qsort(arr, n, sizeof(Pos), compare);
for (int i = 0; i < n; i++)
printf("%d %d\n", arr[i].x, arr[i].y);
free(arr);
}
C++의 STL인 pair의 경우 정렬할 때, 기본적으로 첫번째 원소를 비교하고, 그다음에 두번째 원소를 비교한다고 한다. STL 최고....
// C++ solution
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility> // pair가 정의된 헤더
using namespace std;
int main () {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n; // 테스트 케이스
int x, y; // 좌표
vector<pair<int, int>> pos; // pair로 묶은 좌표를 담을 vector
vector<pair<int, int>>::iterator iter; // 위 벡터의 반복자
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x >> y;
pos.push_back(make_pair(x, y)); // x, y를 pair로 묶어서 vector에 push.
}
sort(pos.begin(), pos.end()); // 정렬
for (iter = pos.begin(); iter != pos.end(); iter++) { // 출력
cout << iter->first << ' ' << iter->second << '\n';
}
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 11651번 C / C++ 풀이 (0) | 2021.11.29 |
---|---|
백준 10814번 C, C++ 풀이 (0) | 2021.11.25 |
백준 2164번 C++ 풀이 (0) | 2021.11.25 |
백준 1181번 C, C++ 풀이 (0) | 2021.11.25 |
백준 10773번 C++풀이 (0) | 2021.11.18 |