백준/심화

1157: 단어 공부 / C++

Koalitsiya 2023. 3. 9. 18:02

문제 

풀이

일단 알파벳의 총 갯수만큼의 크기를 가지는 배열을 0으로 초기화해서 선언 후 모든 문자를 대문자로 변환시켜준다.

이후 각 알파벳의 번호를 인덱스로 가지는 값을 증가 시킨 다음, 가장 많이 사용된 알파벳의 사용 횟수와 인덱스를 저장하고 가장 많이 사용된 알파벳의 사용 횟수와 동일한 사용 횟수를 가지는 알파벳이 있는지 판별 후 가장 많이 사용된 알파벳의 개수가 1보다 크면 ?, 그렇지 않으면 해당 알파벳을 출력한다.

#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;
}