문제 출처: www.acmicpc.net/problem/11651
1. 코드
#include <iostream>
#include <algorithm>
using namespace std;
typedef struct _Position {
int x;
int y;
}Position;
bool cmp(const Position& p1, const Position& p2)
{
if (p1.y == p2.y) //좌표 y가 같다면
return p1.x < p2.x; //좌표 x를 기준으로 올림차순
else
return p1.y < p2.y; //좌표 y를 기준으로 올림차순
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
Position* arr = new Position[n];
for (int i = 0; i < n; i++)
cin >> arr[i].x >> arr[i].y;
sort(arr, arr + n, cmp);
for (int i = 0; i < n; i++)
cout << arr[i].x << " " << arr[i].y << "\n";
delete[] arr;
return 0;
}
2. 풀이
typedef struct _Position {
int x;
int y;
}Position;
여러 개의 x좌표와 y좌표를 입력해야 해서 보다 더 편하게 접근하기 위해서 구조체를 선언하였다.
int n;
cin >> n;
Position* arr = new Position[n];
변수 n을 통해서 사용자의 데이터 케이스의 개수를 입력받고 구조체 포인터 변수를 크기를 n만큼 동적 할당한다.
for (int i = 0; i < n; i++)
cin >> arr[i].x >> arr[i].y;
그리고 좌표 x와 y를 입력받는다.
sort(arr, arr + n, cmp);
sort함수를 통해 배열을 정렬하는데 조건은 아래와 같다.
bool cmp(const Position& p1, const Position& p2)
{
if (p1.y == p2.y) //좌표 y가 같다면
return p1.x < p2.x; //좌표 x를 기준으로 올림차순
else
return p1.y < p2.y; //좌표 y를 기준으로 올림차순
}
좌표 y가 같다면 좌표 x를 기준으로 올림차순으로 정렬하고 그렇지 않다면 좌표 y를 기준으로 올림차순으로 정렬한다.
for (int i = 0; i < n; i++)
cout << arr[i].x << " " << arr[i].y << "\n";
delete[] arr;
return 0;
그리고 반복문을 통해 좌표 x, y를 출력하고 동적 할당된 arr의 메모리를 해제한다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 10814번: 나이순 정렬 [C++] (0) | 2021.02.16 |
---|---|
백준 알고리즘 1181번: 단어 정렬 [C++] (0) | 2021.02.15 |
백준 알고리즘 11650번: 좌표 정렬하기 [C++] (0) | 2021.02.13 |
백준 알고리즘 1427번: 소트인사이드 [C++] (0) | 2021.02.12 |
백준 알고리즘 2108번: 통계학 [C++] (카운팅 정렬) (0) | 2021.02.11 |