주어진 단어에서 가장 많이 사용된 알파벳을 출력하는 문제
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string str;
cin >> str;
int alps[26] = {0};
// 대소문자를 구별하지 않고, 출력값은 대문자이므로 모두 대문자 변경
for (int i = 0; i < str.size(); i++)
{
if (str[i] >= 'a' && str[i] <= 'z')
{
str[i] = str[i] - ('a' - 'A');
}
int alp = str[i] - 'A';
alps[alp] += 1;
}
// 알파벳 카운팅 확인
// for (int i = 0; i < 26; i++)
// {
// cout << (char)(i + 'A') << " : " << alps[i] << '\n';
// }
int max = 0, max_idx = 0, cnt = 0;
for (int i = 0; i < 26; i++)
{
if (alps[i] > max)
{
max = alps[i];
max_idx = i;
cnt = 0;
}
if (alps[i] == max)
{
cnt ++;
}
// cout << char(max_idx + 'A') << ' ' << cnt << '\n';
}
if (cnt > 1)
cout << '?';
else
cout << char(max_idx + 'A');
return 0;
}
위 코드에서 for문 안에
if (alps[i] > max) cnt = 0;
이 수행된 후
if (alps[i] == max) cnt ++;
이 수행되므로
cnt가 1일 때 가장 많이 사용된 알파벳이 하나 존재하는 경우임을 주의하자.
(이것 때문에 한번 틀렸다)