복대가리의 개발

[C#] 백준 (알고리즘)/실버 문제

[백준 - C#] 11650번, 11651 좌표 정렬하기1 ~ 2

복대가리 2022. 7. 6. 22:45
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://www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

문제

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

조건

시간제한 : 1초
메모리 제한 : 256 MB

입력

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

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

 

문제풀이

이번 문제의 경우 x좌표를 오름차순으로 정렬하고 x가 같으면 y좌표를 오름차순으로 정렬하는 문제입니다.

우선 list에 튜플타입으로 x, y를 입력 받고 OrderBy 메소드와 ThenBy 메소드를 이용해서 문제를 해결하였습니다.

 

그리고 같은 문제를 쿼리로도 풀어보았습니다. ( 코드 안에 주석 처리 되어있습니다. )

 

 

11651 문제의 경우 x와 y의 정렬 순서만 반대이므로 똑같이 해결하였습니다.

 

https://docs.microsoft.com/ko-kr/dotnet/api/system.linq.enumerable.orderby?view=net-6.0 

 

Enumerable.OrderBy 메서드 (System.Linq)

시퀀스의 요소를 오름차순으로 정렬합니다.

docs.microsoft.com

https://docs.microsoft.com/ko-kr/dotnet/api/system.linq.enumerable.thenby?view=net-6.0 

 

Enumerable.ThenBy 메서드 (System.Linq)

시퀀스의 요소를 오름차순으로 다시 정렬합니다.

docs.microsoft.com

 

 

 

C# 코드 ( 11650 번 )

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
static void Main(string[] args)
{
    StreamWriter writer = new StreamWriter(Console.OpenStandardOutput());
    StreamReader reader = new StreamReader(Console.OpenStandardInput());
 
    int n = int.Parse(reader.ReadLine());
    List<(intint)> list = new List<(intint)>();
    for (int i = 0; i < n; i++)
    {
        string[] str = reader.ReadLine().Split();
        int x = int.Parse(str[0].ToString());
        int y = int.Parse(str[1].ToString());
        list.Add((x, y));
    }
 
    // x 좌표로 정렬하고, y좌표로 정렬
    var sortList = list.OrderBy(x => x.Item1).ThenBy(x => x.Item2).ToList();
 
    //var sortList = (from data in list
    //                orderby data.Item1, data.Item2
    //                select data).ToList();
 
    for (int i = 0; i < n; i++)
        writer.WriteLine($"{sortList[i].Item1} {sortList[i].Item2}");
 
    writer.Close();
    reader.Close();
}
cs

 

C# 코드 ( 11651 번 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static void Main(string[] args)
{
    StreamWriter writer = new StreamWriter(Console.OpenStandardOutput());
    StreamReader reader = new StreamReader(Console.OpenStandardInput());
 
    int n = int.Parse(reader.ReadLine());
    List<(intint)> list = new List<(intint)>();
    for (int i = 0; i < n; i++)
    {
        string[] str = reader.ReadLine().Split();
        int x = int.Parse(str[0].ToString());
        int y = int.Parse(str[1].ToString());
        list.Add((x, y));
    }
 
    // y 좌표로 정렬하고, x좌표로 정렬
    var sortList = list.OrderBy(x => x.Item2).ThenBy(x => x.Item1).ToList();
 
    for (int i = 0; i < n; i++)
        writer.WriteLine($"{sortList[i].Item1} {sortList[i].Item2}");
 
    writer.Close();
    reader.Close();
}
cs

 

728x90