프로그래밍/BOJ
백준 알고리즘 [1157번] (C++) 단어 공부
coty
2019. 7. 29. 03:28
Code
#include <iostream>
using namespace std;
#define MAX 1000000
int main() {
ios::sync_with_stdio(NULL);
cin.tellg();
char* s = new char[MAX];
int upper[26] = { 0, };
int lower[26] = { 0, };
int seq = 0;
cin >> s;
for (int i = 0; i < MAX; i++) {
if (s[i] >= 'A' && s[i] <= 'Z') { // 대문자인 경우
for (int j = 'A'; j <= 'Z'; j++) {
if (s[i] == j) {
upper[j - 65] += 1;
break;
}
}
}
else if (s[i] >= 'a' && s[i] <= 'z') { // 소문자인 경우
for (int k = 'a'; k <= 'z'; k++) {
if (s[i] == k) {
lower[k - 97] += 1;
break;
}
}
}
} // for
int sum[26] = { 0 , };
for (int a = 0; a < 26; a++)
sum[a] += (upper[a] + lower[a]); // 각 알파벳별로 대문자와 소문자의 출력횟수 합
int max = sum[0];
for (int b = 1; b < 26; b++) { // 각각의 알파벳 총 개수 비교 -> max값,seq 구하기
if (sum[b] > max) {
max = sum[b];
seq = b;
}
}
for (int c = 0; c < 25; c++) { // 나타난 횟수가 같은 알파벳은 '?'를 출력하고 종료
for (int d = c + 1; d < 26; d++) {
if (sum[c] == max && sum[c] == sum[d]) { //sum[c] == max이여야하는
cout << "?"; // 이유는 어떤 문자열을 입력하면 특정한 알파벳이
return 0; // 아무리못해도 나타난횟수가 0은아니고 가장 많이 나타난
} // 알파벳인 경우이므로 sum[c] == max 또는 sum[d] == max이여야 한다.
}
} // for
char A = seq + 65;
cout << A;
delete[] s;
}