WalkerJei's Lifelog

백준알고리즘 1181번 단어 정렬 C# 본문

소프트웨어 개발/코딩테스트(기성 문제)

백준알고리즘 1181번 단어 정렬 C#

WalkerJei 2025. 5. 1. 22:20

세부 정보

  • 사이트: 백준알고리즘
  • 번호: 1181
  • 문제명: 단어 정렬
  • 언어: C#
  • 분류: 문자열, 정렬
  • 비고: 

 

문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

단, 중복된 단어는 하나만 남기고 제거해야 한다.

 

입력

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

 

출력

조건에 따라 정렬하여 단어들을 출력한다.

 

풀이

Linq를 사용한다.

Distinct()는 중복된 데이터를 제거한다.

ToList()는 리스트로 형식을 전환해준다.

OrderBy()의 괄호 안에 정렬 기준을 넣을 수 있다. 여기서는 단어의 길이로 했다.

using System.Linq;
using System.Text;

class Findword
{
    static void Main(String[] args)
    {
        StreamReader sr = new StreamReader(Console.OpenStandardInput());
        StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
        // 입력받은 단어를 저장할 리스트
        List<string> list = new List<string>();
        // 입력할 단어 개수
        int n = Convert.ToInt32(sr.ReadLine());
        
        for (int i = 0; i < n; i++)
        { 
            // 단어를 입력받는다.
            string input = sr.ReadLine();
            // 입력받은 단어를 리스트에 소문자로 바꿔서 저장한다.
            list.Add(input.ToLower());
        }

        // 리스트 내 중복된 단어를 제거한다.
        list = list.Distinct().ToList();
        // 리스트를 오름차순으로 정렬한다.
        list.Sort();
        // 리스트 내의 단어들을 길이 순으로 정렬한다
        list = list.OrderBy(x => x.Length).ToList();

        // 리스트 내 단어 출력
        foreach (string output in list)
            sw.WriteLine(output);
 
        sr.Close();
        sw.Close();
    }
}

 

후기

이번에는 이례적으로 Class와 static void Main(String[] args) 안에서 진행했다. 여기서 Main은 대문자로 써야 하며 main으로 쓰면 오류가 날 수 있다. 그렇지만 빨간 밑줄이 뜨지 않기 때문에 오류가 났다고 인식하기 어렵다. 이렇게도 해본 이유는 실제 코딩테스트 정답 제출 양식이 정해져 있을 수 있기 때문에 그렇게 했다. 정렬 기준이 (x => x.Length)라는 방법으로 쓰이는 것을 확인했다. 피드백 끝에 풀기는 했지만 SQL이 아니라 일반적인 프로그래밍 언어로 대량의 데이터를 처리할려면 무엇을 해야 할 지 생각해야겠다.