[BAEKJOON] 백준 1371: 가장 많은 글자(C#)

2024. 5. 7. 16:02IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/1371

 

 

문제

영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31% 글자는 e이다.

어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하는 프로그램을 작성하시오.

 

 

입력

첫째 줄부터 글의 문장이 주어진다. 글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이상 있다.

 

 

출력

첫째 줄에 가장 많이 나온 문자를 출력한다. 여러 개일 경우에는 알파벳 순으로 앞서는 것부터 모두 공백없이 출력한다.

 

 

통과한 답안

namespace _1371
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Dictionary<char, int> dict = new Dictionary<char, int>();
            string input;

            while ((input = Console.ReadLine()) != null)
            {
                foreach (char c in input)
                {
                    if (char.IsLower(c))
                    {
                        if (dict.ContainsKey(c))
                        {
                            dict[c]++;
                        }
                        else
                        {
                            dict.Add(c, 1);
                        }
                    }
                }
            }

            int maxCnt = dict.Values.Max();
            var sortedDict = dict.Where(x => x.Value == maxCnt)
                                 .Select(x => x.Key)
                                 .OrderBy(x => x).ToList();
            
            foreach (var x in sortedDict)
            {
                Console.Write(x);
            }
        }
    }
}

 

알파벳의 출현 횟수를 저장하는 Dictionary를 선언하고 이를 이용하는 방법을 사용했는데,

공백을 제외하고 이미 존재하는 알파벳은 그 value를 증가시킨다.

 

이후에 가장 많이 나타나는 값을 maxCnt로 선언한 뒤에,

sortedDict를 선언하여 maxCnt와 같은 value를 갖는 원소들의 Key 값을 가지고

이를 알파벳 순으로 정렬하여 List로 만든다.

 

이후에 이 sortedDict에 있는 모든 원소를 출력한다.