[백준 1157번 단어공부] C++ 풀이
Last Updated: 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);
}