백준/문자열
1157: 단어 공부 / C++
Koalitsiya
2023. 3. 8. 15:10
문제
풀이
대소문자를 구분하지 않으므로 transform 함수를 이용해 입력받은 문자열을 전부 대문자로 만들어준다.
이후 문자열의 각 문자마다 해당하는 배열의 인덱스 값을 증가시켜주고 배열을 순회하며 가장 많이 사용된 알파벳의 사용 횟수와 인덱스를 저장한다.
그리고 가장 많이 사용된 알파벳의 사용 횟수와 동일한 사용 횟수를 가지는 알파벳이 있는지 검사하고 있다면 ?를 출력, 없다면 가장 많이 사용된 알파벳을 대문자로 출력한다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s;
int max = 0, idx = 0, cnt = 0;
int alpha[26] = {0};
cin >> s;
transform(s.begin(), s.end(), s.begin(), ::toupper);
for (int i = 0; i < s.length(); i++)
alpha[s[i] - 65]++;
for (int i = 0; i < 26; i++)
if (max < alpha[i]) {
max = alpha[i];
idx = i;
}
for (int i = 0; i < 26; i++)
if (max == alpha[i]) cnt++;
if (cnt > 1) cout << "?";
else cout << (char)(idx + 65);
return 0;
}