[C#] 백준 20920번 영단어 암기는 괴로워

2024. 3. 31. 17:37·Language/C#
반응형

[ 문제 ]

화은이는 이번 영어 시험에서 틀린 문제를 바탕으로 영어 단어 암기를 하려고 한다. 그 과정에서 효율적으로 영어 단어를 외우기 위해 영어 단어장을 만들려 하고 있다. 화은이가 만들고자 하는 단어장의 단어 순서는 다음과 같은 우선순위를 차례로 적용하여 만들어진다.

 

  1. 자주 나오는 단어일수록 앞에 배치한다.
  2. 해당 단어의 길이가 길수록 앞에 배치한다.
  3. 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다

 M보다 짧은 길이의 단어의 경우 읽는 것만으로도 외울 수 있기 때문에 길이가 M이상인 단어들만 외운다고 한다. 화은이가 괴로운 영단어 암기를 효율적으로 할 수 있도록 단어장을 만들어 주자.

 

[ 코드 ]

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이상일때만 딕셔너리에 저장을 했다.

 

[ 실행화면 ]

case: 1
case: 2

 

 

 

 

 


문제링크: https://www.acmicpc.net/problem/20920

 

20920번: 영단어 암기는 괴로워

첫째 줄에는 영어 지문에 나오는 단어의 개수 $N$과 외울 단어의 길이 기준이 되는 $M$이 공백으로 구분되어 주어진다. ($1 \leq N \leq 100\,000$, $1 \leq M \leq 10$) 둘째 줄부터 $N+1$번째 줄까지 외울 단

www.acmicpc.net

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'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
'Language/C#' 카테고리의 다른 글
  • [C#] 백준 11047번 동전 0
  • [C#] 백준 25501번 재귀의 귀재
  • [C#] 백준 2108번 통계학
  • [C#] 백준 26069번 붙임성 좋은 총총이
석영
석영
관심 분야는 AR, VR, 게임이고 유니티 공부 중 입니다. (정보처리기사,컴퓨터그래픽스운용기능사 취득)
반응형
석영
유석영의 개발공부
석영
전체
오늘
어제
  • 분류 전체보기
    • Unity
      • Project
      • Tip
      • Assets
    • Record
      • TIL
      • Game
    • Language
      • C#
      • Node.js
      • HTML, JS
    • Study
      • Linear Algebra

인기 글

최근 글

hELLO· Designed By정상우.v4.5.2
석영
[C#] 백준 20920번 영단어 암기는 괴로워

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.