[백준 1157번 단어공부] C++ 풀이
Last Update: 2020-12-06
문제
문제 링크
 알파벳 대,소문자로 이루어진 문자열을 입력받아 가장 많이 등장한 알파벳을 출력한다. 
이때 대문자와 소문자는 구분하지 않고 개수를 센다.
조건
제한시간: 2초
입력 문자열 길이: 1,000,000이하
가장 많이 사용된 알파벳이 여러개일 경우 '?'를 출력한다.  
풀이과정
- 2초라는 제한시간 안에는 1,000,000개의 문자를 완전탐색해도 시간이 남는다.
- 대문자와 소문자는 아스키코드로 32 차이가 난다.(10진수로)
- 따라서 대문자와 소문자를 같게 취급하며 완전탐색을 할 수 있다.
코드
#include <iostream>
#include <string>
using namespace std;
int count[26] = {0};
int main(){
    string str;
    cin >> str;
    int c;
    for(int i=str.length()-1; i >= 0; i--){
        c = str[i]-65;
        if(c > 25) c-=32;
        count[c]++;
    }
    int max = count[0];
    c=0;
    for(int i=1; i < 26; i++){
        if(max == count[i]){ c = ('?'-65); continue;}
        if(max < count[i]){ max = count[i]; c = i;}
    }
    cout << (char)(c+65);
}