🔗문제 풀러가기
단계별로 풀어보기 단계 6의 5번째 문제이다.
이 문제는 아스키코드에 대한 지식이 있어야 풀 수 있다.
나는 이 문제를 a~z까지의 값을 가지고 있는 배열을 선언하여 풀었다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input;
cin >> input;
int alphaCounts[26] = { 0 };
int maxCount = 0;
int maxIndex = -1;
bool isOverLap = false;
for (int i = 0; i < input.length(); i++)
{
input[i] = toupper(input[i]);
}
for (char ch : input)
{
alphaCounts[ch - 'A']++;
}
for (int i = 0; i < 26; i++)
{
if (alphaCounts[i] > maxCount)
{
maxCount = alphaCounts[i];
maxIndex = i;
}
}
for (int i = 0; i < 26; i++)
{
if (alphaCounts[i] == maxCount && i != maxIndex)
{
isOverLap = true;
break;
}
}
if (isOverLap)
{
cout << "?";
}
else
{
cout << (char)(maxIndex + 'A');
}
}
string을 입력 받은 후 toupper을 통해 모두 대문자로 바꾸어 준다.
범위기반 for문을 통해 alphaCounts배열에 알파벳의 맞는 값들을 넣어둔다.
(counts[0]('A'를 나타냄)은 1, counts[1]('B'를 나타냄)는 2...)
그 후 알파벳의 개수인 26번 만큼 for문을 돌려 가장 많이 사용된 알파벳을 구해 가장 많이 사용된 알파벳이 여러개면 ?를, 아니라면 그 알파벳을 출력하면 끝!