반응형
[ 문제 ]
화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다. 그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려 하고 있다. 화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.
- 자주 나오는 단어일수록 앞에 배치한다.
- 해당 단어의 길이가 길수록 앞에 배치한다.
- 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다
이상인 단어들만 외운다고 한다. 화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.
보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가
[ 코드 ]
1. 내 코드
using System.Text;
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
StringBuilder sb = new StringBuilder();
string[] s = sr.ReadLine().Split();
int n = int.Parse(s[0]);
int m = int.Parse(s[1]);
Dictionary<string, int> wordArray = new Dictionary<string, int>();
for (int i = 0; i < n; i++)
{
string word = sr.ReadLine();
if (wordArray.ContainsKey(word))
{
wordArray[word]++;
}
else
{
wordArray.Add(word, 1);
}
}
var words = wordArray.Where(x=> x.Key.Length >= m).OrderByDescending(x => x.Value).ThenByDescending(x => x.Key.Length).ThenBy(x=> x.Key).Select(x=> x.Key).ToList();
foreach (var word in words)
{
sb.AppendLine($"{word}");
}
sw.Write(sb);
sw.Flush();
sw.Close();
sr.Close();
2. 다른 사람 코드
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
class Test
{
public string Name { get; set; }
public int Length { get; set; }
public int Count { get; set; }
}
class Program
{
static void Main()
{
StreamReader sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
StreamWriter sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
StringBuilder sb = new StringBuilder();
int[] N = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
var result = new Dictionary<string, Test>();
for (int i = 0; i < N[0]; i++)
{
string s = sr.ReadLine();
// 이미 등록된 단어인지 확인
if (result.TryGetValue(s, out var existingTest))
{
// 등록된 단어면 Count 증가
existingTest.Count++;
}
else if (s.Length >= N[1])
{
// 등록되지 않은 단어면 새로 추가
result[s] = new Test { Name = s, Length = s.Length, Count = 1 };
}
}
// Count가 높은 순으로 정렬하고 Length가 높은 순으로 정렬 후
var sortedResult = result.Values.OrderByDescending(t => t.Count)
.ThenByDescending(t => t.Length)
.ThenBy(t => t.Name, StringComparer.Ordinal);
foreach (var test in sortedResult)
{
sb.AppendLine($"{test.Name}");
}
sw.WriteLine(sb.ToString());
sr.Close();
sw.Close();
}
}
- 거의 비슷한데 나는 입력받을때 M이하 글자도 딕셔너리에 넣고 리스트에 넣을때 Where문으로 걸러냈고
다른 사람 코드는 글자가 M이상일때만 딕셔너리에 저장을 했다.
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/20920
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 11047번 동전 0 (0) | 2024.04.02 |
---|---|
[C#] 백준 25501번 재귀의 귀재 (0) | 2024.04.01 |
[C#] 백준 2108번 통계학 (0) | 2024.03.31 |
[C#] 백준 26069번 붙임성 좋은 총총이 (0) | 2024.03.30 |
[C#] 백준 25192번 인사성 밝은 곰곰이 (0) | 2024.03.30 |