[백준 11651] 좌표 정렬하기 2 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
2차원 평면 위의 점들을 문제의 조건에 따른 정렬 기준에 따라서 정렬하는 문제입니다.
정렬 기준은 다음과 같습니다.
y
좌표가 증가하는 순으로 정렬y
좌표가 같다면,x
좌표가 증가하는 순으로 정렬
C#
에서는 LINQ
를 활용하여 정렬하였고,
C++
에서는 sort()
함수의 세 번째 매개변수로 사용될 별도의 비교함수를 구현하여 정렬하였습니다.
C#
에서는 StringBuilder
을 사용하지 않으면 시간 초과
가 됨에 주의합니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
namespace Solution {
using System.Text;
class Program {
static void Main(string[] args) {
var n = int.Parse(Console.ReadLine()!);
var coord = new (int, int)[n];
for (int i = 0; i < n; i++) {
var points = Console.ReadLine()!.Split(' ').Select(int.Parse).ToArray();
coord[i] = (points[0], points[1]);
}
coord = coord
.OrderBy(p => p.Item2)
.ThenBy(p => p.Item1)
.ToArray();
var sb = new StringBuilder();
foreach (var points in coord)
sb.AppendLine($"{points.Item1} {points.Item2}");
Console.Write(sb.ToString());
}
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
bool comp(const pii& a, const pii& b) {
if (a.second == b.second)
return a.first < b.first;
return a.second < b.second;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
vector<pii> coord(n);
for (int i = 0; i < n; i++)
cin >> coord[i].first >> coord[i].second;
sort(coord.begin(), coord.end(), comp);
for (const auto& points : coord)
cout << points.first << " " << points.second << "\n";
return 0;
}