https://www.acmicpc.net/problem/1157
alphabets[]라는 배열을 만들어서, 여기 a는 0, b는 1에 각 문자가 반복되는 횟수를 저장했다.
관건은 답을 프린트하는건데,
alpahbet배열을 traverse 하며, biggest라는 int 값을 통해 가장 큰 횟수를 저장하고, 그 횟수에 해당하는 알파벳과 반복 횟수를 pair로 만들어서 벡터에 넣었다가, 만약 그거보다 큰 횟수의 알파벳이 있으면 answer 벡터를 비워버리고 새로운 알파벳 pair를 저장했다.
이렇게 배열을 다 traverse한 후에, 만약 answer벡터에 값이 2이상 있으면 가장 큰 반복 횟수를 가진 알파벳이 두 개 이상이라는 거니까 ? 을 프린트하고, 아니면 그냥 알파벳 index + 'A' 를 프린트해줬다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(void){
string s;
cin >> s;
int alphabets[26] = { 0,};
for(int i = 0; i<s.length(); i++){
if(s[i]>='a'){
alphabets[s[i] - 'a']++;
}else{
alphabets[s[i] - 'A']++;
}
}
int biggest = 0;
vector<pair<int, int> > answer;
for(int i = 0; i<26; i++){
if(alphabets[i]>biggest){
answer.clear();
biggest = alphabets[i];
answer.push_back(make_pair(i, alphabets[i]));
}else if(alphabets[i] == biggest){
answer.push_back(make_pair(i, alphabets[i]));
}
}
if(answer.size()>1){
cout << "?" << endl;
}else{
char temp = 'A' + answer.front().first;
cout << temp << endl;
}
}
'컴퓨터기본 > 문제풀이' 카테고리의 다른 글
[백준] 9012번: 괄호 (0) | 2021.08.07 |
---|---|
[백준] 1152번: 단어의 개수 (0) | 2021.06.30 |
[백준] 2675번: 문자열 반복 (0) | 2021.06.27 |
[백준] 2164번: 카드2 (0) | 2021.06.24 |
[백준] 18258번: 큐2 (0) | 2021.06.24 |