
생각
1. 문자열의 각 문자를 대문자로 바꾼다
2. 문자열 길이만큼 반복하며 map에 원소 등록
3. find 함수로 이미 원소가 존재하면, +1
4. map을 순회하며 value가 최대인 key 출력. 최대가 2개 이상이면 ?출력
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
string str;
cin >> str;
for(int i=0; i<str.length(); i++){
str[i] = toupper(str[i]);
}
map<char, int> m;
for(int i=0; i<str.length(); i++){
if(m.find(str[i]) == m.end()){
m[str[i]] = 1;
}
else{
m[str[i]]++;
}
}
char var;
int max=0;
int flag=0;
for (map<char, int>::iterator it = m.begin(); it != m.end(); it++){
if(it->second > max){max = it->second; var=it->first;}
}
for (map<char, int>::iterator it = m.begin(); it != m.end(); it++){
if(it->second == max){flag++;}
}
if(flag>1){cout<<"?";}
else{cout<<var;}
return 0;
}
map을 처음 써 봐서 코드가 너무 지저분하다. 플래그를 통해서 최대인 글자수의 중복을 확인 했는데, 다른 방법도 생각해 봐야 겠다.
'공부기록 > [Algorithm]' 카테고리의 다른 글
| 백준 2745번 <진법 변환> - C++ (1) | 2024.08.07 |
|---|---|
| 백준 2563번 <색종이> - C++ (0) | 2024.08.06 |
| 백준 5622번 <다이얼> - C++ (1) | 2024.08.03 |
| 백준 1152번 <단어의 개수> - C++ (0) | 2024.08.03 |
| 백준 2675번 <문자열 반복> - C++ (3) | 2024.08.03 |