본문 바로가기
Development/Baekjoon

[C#] 1157번: 단어 공부

by Mobics 2025. 8. 20.

목차


    백준 단계별로 풀어보기

    25.08.20

    6단계: 심화 1


    1157번: 단어 공부

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

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - 소문자를 모두 대문자로 변환해주는 함수

    : string 클래스에서 제공해주는 함수로, 'ToUpper()'를 사용하면 소문자를 모두 대문자로 변환해준다.

    ※ 반대로 대문자를 모두 소문자로 변환해주는 함수는 'ToLower()'이다.

     

    >> 풀이

    1. 가장 많이 사용한 알파벳을 출력할 때 대문자로 호출하기 때문에 입력을 받아서 소문자를 모두 대문자로 변환해준다.
    2. 문자열을 문자의 배열(characters)로 받는다.
    3. 알파벳 A부터 Z까지 개수를 담아줄 정수 배열(counts)을 만든다. --> 따라서 배열의 크기도 알파벳 개수인 26으로 설정한다.
    4. foreach문으로 characters를 돌면서 해당하는 알파벳에 따라 정수 배열의 숫자를 늘려준다.
      •     문자 또한 정수값이므로, ASKII Code에 따라 해당하는 알파벳에서 'A' 값을 빼주면 0~26의 값으로 나오기 때문에 이를 index 번호로 활용할 수 있다.
    5. for문으로 정수 배열을 돌면서 가장 count가 높은 값을 maxCount에 담고, 그때의 index를 캐싱한다.
    6. 다시 한번 for문으로 정수 배열을 돌면서 maxCount와 count가 같은 값이 있는지 찾는다.
      •     기존에 찾은 index번호와 같을 때는 넘어갈 수 있도록 해야한다.
    7. 같은 값이 있다면 "?"를 반환하고 종료, 같은 값이 없다면 찾아놓은 index에 다시 'A'만큼 더해서 char로 변환하여 출력한다.

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            string upperInput = input.ToUpper();
            char[] characters = upperInput.ToCharArray();
            int[] counts = new int[26];
            int maxCount = 0;
            int index = -1;
    
            foreach (char c in characters)
            {
                counts[c - 'A']++;
            }
    
            for (int i = 0; i < counts.Length; i++)
            {
                if (counts[i] > maxCount)
                {
                    maxCount = counts[i];
                    index = i;
                }
            }
    
            for (int i = 0; i < counts.Length; i++)
            {
                if (i != index && counts[i] == maxCount)
                {
                    Console.Write('?');
                    return;
                }
            }
            Console.Write((char)(index + 'A'));
        }
    }