주어진 단어에서 대소문자를 구별하지 않고 알파벳을 세는 문제이다.
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를 갱신하며 최다 알파벳이 중복되는 지를 확인하면 된다.
'백준 > 단계별' 카테고리의 다른 글
백준 2941 C#) 크로아티아 알파벳 (0) | 2022.04.27 |
---|---|
백준 1152 C#) 단어의 개수 (0) | 2022.04.22 |
백준 11720 C#) 숫자의 합 (0) | 2022.04.21 |
백준 4673 C#) 셀프 넘버 (0) | 2022.04.19 |
백준 4344 C#) 평균은 넘겠지 (0) | 2022.04.18 |
댓글