문자열에 관한 문제는 아스키코드를 활용하는 것이 많다.
아스키코드에 대해 공부해 활용할 수 있어야 문제 풀이를 생각할 때 훨씬 유용할 것 같다.
우선 단어를 대소문자 관련없게 알파벳 카운트를 받아 count 변수에 담아줘야 편리하다.
그 후 가장 많이 나온 알파벳을 구해주고, overlap이라는 불 변수를 활용해 문제에서 언급하는 예외사항에 대해 처리해준다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int count[26] = { 0 };
string word;
cin >> word;
//대소문자 상관없이 알파벳 별 개수 받기
for (int i = 0; i < word.length(); i++)
{
if (word[i] < 97) //대문자면 65를 빼고
word[i] -= 65;
else //소문자면 97을 뺌
word[i] -= 97;
count[word[i]]++;
}
int maxIndex = 0;
int maxNum = 0;
bool overlap = false;
//최빈 알파벳 구하기
for (int i = 0; i < 26; i++)
{
if (maxNum < count[i])
{
maxNum = count[i];
maxIndex = i;
overlap = false;
}
else if (count[maxIndex] == count[i])
overlap = true;
}
if (overlap)
cout << "?";
else
cout << char(maxIndex + 65);
}
'C++ > 백준 코딩테스트 풀이 C++' 카테고리의 다른 글
C++ 1085 직사각형에서 탈출 / 제곱 / 제곱근 / 최소값 (0) | 2022.06.27 |
---|---|
C++ 3052 나머지 (0) | 2022.06.27 |
C++ 1546 평균 (0) | 2022.06.22 |
C++ 2908 상수 (0) | 2022.06.21 |
C++ 2577 숫자의 개수 (0) | 2022.06.20 |