반응형

[문제]
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
[소스 코드]
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
//
// 문제
// 1. x좌표, y좌표 를 정렬하는 순서대로 출력하라
// 입력
// 1. N을 입력 받는다.
// 2. N만큼 반복문을 돌리며 x, y좌표를 입력 받는다.
// 처리
// 1. sort 문을 써서 정렬시킨다.
// 출력
//
multiset<pair<int, int>> set;
int N = 0;
cin >> N;
for (int i = 0; i < N; i++)
{
int X = 0;
int Y = 0;
cin >> X >> Y;
set.insert({ X, Y });
}
//sort(set.begin(), set.end());
for (multiset<pair<int, int>>::iterator iter = set.begin(); iter != set.end(); iter++)
{
pair<int, int> p1 = *iter;
cout << p1.first << " " << p1.second << "\n";
}
/*for (pair <int, int> p1 : set)
{
cout << p1.first << " " << p1.second << "\n";
}*/
return 0;
}
다른 풀이)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int, int>> v;
int main() {
int N;
cin >> N;
int x, y;
for (int i = 0; i < N; i++) {
cin >> x >> y;
v.push_back({ x, y });
}
sort(v.begin(), v.end());
for (int i = 0; i < N; i++) {
cout << v[i].first << ' ' << v[i].second << '\n';
}
return 0;
}
[피드백]
반응형
'알고리즘' 카테고리의 다른 글
| [백준 알고리즘 c++] 문제 64. 좌표압축 18870 (0) | 2022.09.07 |
|---|---|
| [백준 알고리즘 c++] 문제 62. 단어 정렬 1181 (0) | 2022.09.07 |
| [백준 알고리즘 c++] 문제 59.소프인사이드 1407 (0) | 2022.09.07 |
| [백준 알고리즘 c++] 문제 58.통계학 2108 (0) | 2022.09.07 |
| [백준 알고리즘 c++] 문제 57.수 정렬하기 3 10989 (0) | 2022.09.06 |