https://www.acmicpc.net/problem/1157
가장 많이 쓴 영어 단어를 대문자로 출력하라.
사실 그냥 문자를 숫자로 취급한 아스키코드로 쉽게 풀어줄 수도 있지만, 저번에 map으로 이런 비슷한 문제를 풀어 봤던것 같아서 map을 써서 풀어 볼 것이다.
key-value로 char-int로 두면 각 문자가 등장한 횟수를 쉽게 알 수 있다.
#include <iostream>
#include <map>
using namespace std;
string s;
map<char, int> m;
//가장 많이 사용된 알파벳 2개이상일 경우 "?" 출력
int main(){
cin >> s;
for (int i = 0; i < s.length(); i++) {
s[i] = toupper(s[i]);
m[s[i]]++;
}
char res = ' ';
int max = 0;
for (auto i : m) {
if (max < i.second) {
max = i.second;
res = i.first;
}
}
for (auto i : m) {
if (i.first != res && max == i.second) {
cout << "?";
return 0;
}
}
cout << res;
}
아스키코드 변환은 다들 알거라 생각하지만 내 기억용으로 대문자 'A' : 65, 소문자 'a' : 97 이다.
'Algorithm > 구현, 시뮬레이션' 카테고리의 다른 글
[BAEKJOON] 10431번 줄세우기 (1) | 2024.03.19 |
---|---|
[BAEKJOON] 9655번 돌게임 (1) | 2024.03.19 |
[BAEKJOON] 2292번 벌집 (0) | 2024.03.18 |
[BAEKJOON] 5073번 삼각형과 세 변 (1) | 2024.03.18 |
[BAEKJOON] 23971번 ZOAC 4 (0) | 2024.03.18 |