[11650] 좌표 정렬하기

RudinP·2023년 4월 6일
0

BaekJoon

목록 보기
23/77

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는 해당 블로그를 참고하였다.

profile
곰을 좋아합니다. <a href = "https://github.com/RudinP">github</a>

0개의 댓글