본문 바로가기
백준/단계별

백준 11650 C#) 좌표 정렬하기

by alpacadabra 2022. 10. 12.

ValueTuple을 활용하면 쉽게 풀 수 있다.

 

public static class PS
{
    public static void Main()
    {
        StreamWriter sw = new(new BufferedStream(Console.OpenStandardOutput()));

        int n = int.Parse(Console.ReadLine());
        (int x, int y)[] arr = new (int x, int y)[n];
        string[] xy;

        for (int i = 0; i < n; i++)
        {
            xy = Console.ReadLine().Split();
            arr[i] = (int.Parse(xy[0]), int.Parse(xy[1]));
        }

        Array.Sort(arr);

        for (int i = 0; i < n; i++)
        {
            sw.WriteLine($"{arr[i].x} {arr[i].y}");
        }

        sw.Close();
    }
}

 

ValueTuple은 단순히 여러 변수들을 묶어놓은 것에 불과하다. 무언가 기능이 있거나 하진 않다.

다만 관련있는 변수들을 묶어놓음으로써 의미를 부여할 수가 있다.

예를 들어, int x와 int y를 소괄호로 묶어 point라는 변수명으로 선언하게 되면 (int x, int y) point라고 하는 2D 좌표를 즉석에서 생성할 수 있다.

 

물론, (int x, int y) 자체를 하나의 타입으로써 사용할 수도 있다.

이는 (int x, int y)가 내부적으로는 ValueTuple<int, int>로 해석되기 때문인데, 조금 생소하긴 하지만 따로 구조체를 작성할 필요가 없으므로 상당히 빠르고 편리하다고 할 수 있다.

다만 묶어야 할 변수들이 많은 경우에는 오히려 가독성이 떨어질 수 있으므로 지양하는 편이 좋다.

 

VauleTuple은 C#에서 지원하는 자료형인 만큼 IComparable이 구현되어 있다.

따라서 빌트인된 Sort를 문제없이 사용할 수 있다. 정렬 기준은 문제에서 요구하는 바와 같으므로 아무런 옵션 없이 사용해도 원하는 출력이 나올 것이다.

 

IComparable이 뭔지 모르겠다면 아래 글을 통해 알아보도록 하자.

 

 

비교-정렬을 위한 두 인터페이스, IComparable과 IComparer

IComparable 과 IComparer 는 비슷한 일을 하지만 근본적인 차이가 있다. 이 게시글에서는 두 인터페이스의 용도와 차이에 대해 알아볼 것이다. IComparable C#의 커스텀 클래스는 기본적으로 "비교 불가능

sete3683.tistory.com

 

'백준 > 단계별' 카테고리의 다른 글

백준 18870 C#) 좌표 압축  (0) 2022.12.30
백준 11651 C#) 좌표 정렬하기 2  (0) 2022.10.12
백준 1436 C#) 영화감독 숌  (0) 2022.05.28
백준 1018 C#) 체스판 다시 칠하기  (0) 2022.05.27
백준 7568 C#) 덩치  (0) 2022.05.25

댓글