백준 C# 1181 단어 정렬

김보근·2025년 6월 3일

백준

목록 보기
31/62

📘백준 C# 1181 단어 정렬


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

오늘은 백준 1181번 문제를 C#으로 풀어보았다.
문제의 핵심은 다음과 같다:

📌 문제 설명

입력으로 주어진 단어들을 다음 기준에 따라 정렬하는 문제다.

길이가 짧은 순으로 정렬

길이가 같으면 사전 순으로 정렬

중복된 단어는 제거

🤔 처음 시도한 방식

처음에는 입력된 단어를 배열에 저장하고, 직접 정렬을 구현하려고 했다.
길이만 비교해서 버블 정렬 비슷하게 돌렸는데, 테스트케이스에서 순서가 계속 꼬였다.

while (count < input)
{
    for (int i = 0; i < output.Length - 1; i++)
    {
        if (output[i].Length > output[i + 1].Length)
        {
            // Swap
            string temp = output[i];
            output[i] = output[i + 1];
            output[i + 1] = temp;
        }
    }
    count++;
}

여기서의 문제는:

길이만 비교하고 사전순 비교가 빠졌고

버블 정렬을 정확하게 구현하지도 않았으며

중복 제거 후 배열 길이와 비교 횟수가 어긋남

✅ 해결 방법

결국 C#의 LINQ를 활용해서 훨씬 간단하고 정확하게 해결할 수 있었다.

using System;
using System.Linq;

namespace backjoon
{
    internal class Program
    {
        static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            string[] words = new string[n];

            for (int i = 0; i < n; i++)
            {
                words[i] = Console.ReadLine();
            }

            var result = words
                .Distinct()
                .OrderBy(word => word.Length)
                .ThenBy(word => word);

            foreach (var word in result)
            {
                Console.WriteLine(word);
            }
        }
    }
}

🧠 배운 점

직접 정렬 알고리즘을 구현하는 것도 좋지만, 조건이 여러 개일 때는 OrderBy와 ThenBy 조합이 훨씬 깔끔하다.

Distinct()로 중복 제거도 쉽게 할 수 있다.

LINQ는 익숙해질수록 문제 해결에 큰 도움이 된다.

다음에는 조건이 더 복잡한 정렬 문제도 LINQ로 도전해봐야겠다.

profile
게임개발자꿈나무

0개의 댓글