백준 온라인 저지 / 1181 단어 정렬
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
- 사용언어 : C# (.NET)
- 알고리즘 : 정렬
C#코드
1. 문제 정리
이번 문제는 전형적인 정렬 문제입니다.
첫 접근은 일단 리스트와 정렬 함수를 통해 단어의 길이가 짧은 것 부터 출력하고
만약 길이가 같다면 사전순으로 정렬하는 것이라네요 네..
일단 20000개를 입력 받고 문자열의 길이는 50개를 넘는다고 하지 않으니
다른 무언가를 사용하지 않고 풀 수 있겠다는 생각이 들었다만....
2. Linq
링크의 대한 정의 및 문서는 여기를 클릭해주세요
우린 linq에서 ordered by를 사용할 것입니다.
slist = slist.OrderBy(x => x.Length).ToList();
링크에서 orderedby는 기본 값이 ascending 즉 오름차순이라는 기본 값을 가지고 있습니다.
뒤에 리스트 안에서 오름차순이라고 정해줬죠?
사실 그냥 system 안에 있는 sort로도 구현 할 수 있지만 편하니깐? 쓴다고 칩시다. ㅋㅋㅋ
for (int i = 0; i < cnt; i++)
{
string word = Console.ReadLine();
slist.Add(word.ToLower());
}
slist = slist.Distinct().ToList();
또 링크 안에 distinct를 사용하는데 이 함수는 c#뿐만 아니고 다른 언어에서도 중복된 데이터를 삭제한다는 의미를 가지고 있습니다.
for문에서 중복되는 값이 생성 되었을 때 중복된 값을 없애주는거죠
3. 코드 작성
using System;
using System.Collections.Generic;
using System.Linq;
namespace boj
{
class Program
{
static void Main(string[] args)
{
int cnt = int.Parse(Console.ReadLine());
List<string> slist = new List<string>();
for (int i = 0; i < cnt; i++)
{
string word = Console.ReadLine();
slist.Add(word.ToLower());
}
slist = slist.Distinct().ToList();
slist.Sort();
slist = slist.OrderBy(x => x.Length).ToList();
foreach (string ans in slist)
{
Console.WriteLine(ans);
}
}
}
}
'백준 알고리즘 > Lang-C#' 카테고리의 다른 글
[백준/C# (.NET)] 2480번 주사위 세개 (0) | 2021.08.13 |
---|---|
[백준/C# (.NET)] 1712번 손익분기점 (0) | 2021.08.12 |
[백준/C# (.NET) 14928번 큰 수 (BIG)] (0) | 2021.08.11 |
[백준/C# (.NET)] 10757번 큰 수 A + B (0) | 2021.08.11 |
[백준/C# (.NET)] 22864번 피로도 (0) | 2021.08.10 |