프로그래밍/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;
}