본문 바로가기
알고리즘/백준 BOJ

[ BOJ/C# ] 11650 좌표 정렬하기

by 왹져박사 2023. 9. 29.
728x90

https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

https://learn.microsoft.com/ko-kr/dotnet/api/system.array.sort?view=net-7.0#system-array-sort(system-array-system-collections-icomparer)

 

Array.Sort 메서드 (System)

1차원 배열의 요소를 정렬합니다.

learn.microsoft.com

이번에는 지난번 다른 문제에서 상위권분이 푸신 방법을 공부하여 응용해 보았다. 

Array.Sort의 오버로드 중, Sort(Array, IComparer)이라고 생각되었다. 

다른 문제에서 효과적이었던 방법으로 해결하였지만, 기대에 비해 시간이 많이 들었다. 

상위권 코드를 보니 Heap과 Struct로 굉장히 효과적으로 푼 코드였다. 

다 아는 개념이지만, 지금까지의 나는 이렇게 적재적소에 활용하지는 못했다고 생각이 들었다. 

그렇기에 다른 분들의 코드를 많이 보면서 공부하고 더 발전해야겠다!

단순히 백준 알고리즘으로 끝나는 것이 아니라, 실제 작업에도 활용할 수 있는 방식을 배워나가고 싶다. 

using System;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace B11650
{
    class Program
    {
        class Coordinate
        {
            public int x { get; set; }
            public int y { get; set; }
        }
        static void Main()
        {
            StreamReader sr = new StreamReader(Console.OpenStandardInput());
            StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
            StringBuilder sb = new StringBuilder();
            int n = int.Parse(sr.ReadLine());
            Coordinate[] array = new Coordinate[n];
            for(int i= 0; i < n; i++)
            {
                int[] xy = Array.ConvertAll(sr.ReadLine().Split(' '), int.Parse);
                array[i] = new Coordinate { x = xy[0], y = xy[1] };
            }
            //정렬하기
            Array.Sort(array, (Coordinate a, Coordinate b) =>
            {
                if (a.x == b.x) return a.y.CompareTo(b.y);
                else
                {
                    if (a.x > b.x) return 1;
                    else if (a.x < b.x) return -1;
                    else return 0;
                }
            });
            foreach(Coordinate c in array)
                sb.Append(c.x + " " + c.y + "\n");
            sw.Write(sb);
            sr.Close();
            sw.Flush();
            sw.Close();
        }
    }
}

728x90

'알고리즘 > 백준 BOJ' 카테고리의 다른 글

[ BOJ/C# ] 9012 괄호  (0) 2023.10.01
[ BOJ/C# ] 11866 요세푸스 문제 0  (0) 2023.09.30
[ BOJ/C# ] 10814 나이순 정렬  (0) 2023.09.29
[ BOJ/C# ] 1181 단어 정렬  (0) 2023.09.28
[ BOJ/C# ] 1260 DFS와 BFS  (0) 2023.09.26