반응형
[ 문제 ]
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
1. 길이가 짧은 것부터
2. 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
[ 코드 ]
1. 내 코드 - 배열 정렬 후 Distinct해서 중복을 없애기
using System.Text;
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
StringBuilder sb = new StringBuilder();
int n = int.Parse(sr.ReadLine());
string[] arr = new string[n];
for (int i = 0; i < n; i++)
{
string s = sr.ReadLine();
arr[i] = s;
}
var result = arr.OrderBy(x => x.Length).ThenBy(x => x).Distinct().ToArray();
foreach (var s in result)
{
sb.AppendLine(s);
}
sw.Write(sb);
sw.Flush();
sr.Close();
sw.Close();
2. Hashset을 이용한 다른 코드
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int n = int.Parse(sr.ReadLine());
var set = new HashSet<string>();
string[] arr = new string[n];
for (int i = 0; i < n; i++)
{
set.Add(sr.ReadLine());
}
foreach (var s in set.OrderBy(s => s.Length).ThenBy(s => s))
{
sw.WriteLine(s);
}
sw.Flush();
sr.Close();
sw.Close();
HashSet은 중복된 값을 허용하지 않아서 굳이 배열을 Distinct를 할 필요가 없었다.
시간도, 메모리도 HashSet을 사용하는게 좋았다. 앞으로는 잘 사용해보도록 하자.
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/1181
다른 사람 코드를 보고 배워가는게 많은 것 같다. 굿
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 1100번 하얀 칸 (0) | 2024.02.23 |
---|---|
[C#] 백준 28114번 팀명 정하기 (2) | 2024.02.21 |
[C#] 백준 11650번 좌표 정렬하기 (0) | 2024.02.20 |
[C#] 백준 2587번 대표값2 (중앙값을 퀵 정렬 이용하여 풀기) (0) | 2024.02.19 |
[C#] 백준 2839번 설탕 배달 (0) | 2024.02.18 |