2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
- 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
- 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
생각
xi와 yi의 범위가 -100,000~ 100,000 이기 때문에, 계수정렬은 사용할 수 없다.
또한, x y 두가지 값이 묶여있어야하기 때문에 구조체를 이용했다.
namespace SongE
{
public class Program
{
struct P
{
public int x;
public int y;
}
static void Main(string[] args)
{
using var input = new System.IO.StreamReader(Console.OpenStandardInput());
using var print = new System.IO.StreamWriter(Console.OpenStandardOutput());
int n = int.Parse(input.ReadLine());
P[] points = new P[n];
for (int i = 0; i < n; i++)
{
int[] ints = Array.ConvertAll(input.ReadLine().Split(), s => int.Parse(s));
points[i].x = ints[0];
points[i].y = ints[1];
}
Array.Sort(points, (a, b) =>
{
if (a.x < b.x)
return -1;
else if (a.x > b.x)
return 1;
else
return a.y < b.y ? -1 : 1;
});
foreach (P point in points)
{
print.WriteLine($"{point.x} {point.y}");
}
}
}
}
람다식을 이용한 Array.Sort는 해당 블로그를 참고하였다.