최대 1 분 소요

문제

단어를 입력하면 알파벳의 개수를 센다 => 가장 많은 빈도를 가진 알파벳을 대문자로 출력하고, 최대 개수가 같다면 ?를 출력

코드

#include <iostream>
#include <string>

int main()
{
    std::string str;
    std::cin >> str;

    int num[26] = {
        0,
    };

    for (int i = 0; i < str.length(); i++)
    {
        int idx = std::tolower(str[i]) - 'a';
        num[idx]++;
    }

    int maxIdx = 0;
    int isSame = false;
    for (int i = 1; i < 26; i++)
    {
        if (num[maxIdx] == num[i])
        {
            isSame = true;
        }
        if (num[maxIdx] < num[i])
        {
            maxIdx = i;
            isSame = false;
        }
    }

    if (isSame)
    {
        std::cout << "?" << std::endl;
    }
    else
    {
        char ans = maxIdx + 'a' - 32;
        std::cout << ans << std::endl;
    }
}

풀이

ASCII 사용! -> 단어의 길이만큼 반복문을 돌리면서 해당 인덱스에 +1 씩한다. -> 알파벳 개수만큼 반복문을 돌리면서 최대 개수가 같다면 isSame을 true로 바꾸고, 최대 개수가 바뀔때마다 최대 개수의 인덱스 역시 바꾸여주면서 동시에 isSame을 false로 바꾸어 준다.

배운 점

  1. str 입력받기 => std::string
  2. 소문자로 바꾸기 -> std::tolower -> 리턴값은 해당 ascii 코드값

댓글남기기