백준/단계별

백준 1157 C#) 단어 공부

alpacadabra 2022. 4. 22. 01:46

주어진 단어에서 대소문자를 구별하지 않고 알파벳을 세는 문제이다.

 

int[] cnt = new int[26];
int max = 0;
int idx = 0;
bool isDup = false;

string s = Console.ReadLine();

//대소문자 처리
foreach (char c in s)
{
    if (c >= 'a')
        cnt[c - 'a']++;
    else
        cnt[c - 'A']++;
}

//중복 검사
for (int i = 0; i < 26; i++)
{
    if (cnt[i] > max)
    {
        max = cnt[i];
        idx = i;
        isDup = false;
    }
    else if (cnt[i] == max)
    {
        isDup = true;
    }
}

Console.Write(!isDup ? (char)(idx + 'A') : '?');

 

단어를 받으면 우선 각 알파벳이 대문자인지 소문자인지를 판별해야 한다.

위 코드에서는 판별하여 처리했으나 정 귀찮다면 Char.ToUpper 메소드를 사용해 전부 대문자로 만들어버리는 방법도 있을 것이다. (물론 효율적인 방법은 아니다)

그리고 max를 갱신하며 최다 알파벳이 중복되는 지를 확인하면 된다.