하루 한 접시

[백준] 1181번: 단어 정렬하기 [C#]

NaZZU 2024. 3. 20. 22:16

첫째 줄에는 반복 횟수. 둘째 줄부터는 단어가 입력된다.

단어는 중복을 제외해야 한다.

정렬은 1. 길이가 짧은 순서 -> 2. 알파벳 사전 순서대로 해야 한다.

----------------------------------------------------------------------------------------------------------------------------------------------------------------

정렬은 순서를 거꾸로 뒤집어 알파벳 사전 순 정렬(문자열 정렬)을 먼저하고,

길이순 정렬( int 정렬)을 해주면 된다. 

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
29
30
31
32
33
34
using System.IO;
using System.Text;
//using System.Linq;
 
namespace 연습장
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using var reader = new StreamReader(Console.OpenStandardInput());
            using var print = new StreamWriter(Console.OpenStandardOutput());
            StringBuilder sb = new StringBuilder();
 
            int N = int.Parse(reader.ReadLine());
            string[] sArr = new string[N];
 
            for(int i = 0; i < N; i++)
            {
                sArr[i] = reader.ReadLine().ToLower();
            }
 
            sArr = sArr.Distinct().ToArray();
            Array.Sort(sArr);
            sArr = sArr.OrderBy(a => a.Length).ToArray();
 
            foreach (string res in sArr)
                sb.Append(res + "\n");
 
            print.WriteLine(sb);
 
        }
    }
}
cs

처음에는 중복 문자열을 제거하는 메소드와 문자열을 길이 순서대로 정렬해주는 메소드를 몰라서 직접 구현을 했었는데,

계속 틀렸다.

 

.Distinct() 메소드는 리스트 혹은 배열에서 중복되는 값들을 제거 한 후 IEnumerable 요소들을 반환한다고 한다. ToList() 혹은 ToArray를 통해 원래의 형태로 변환시킬 수 있다고 한다.

.OrderBy 메소드는  람다 표현식을 인수로 받아 오름차순 정렬을 한 후 IEnumerable 로 반환한다고 한다.

이 두 메소드는 모두 System.Linq 네임스페이스에 속하기 때문에, using System.Linq를 적어 줘야 한다.