반응형
● 문제 접근 과정
1. 대문자와 소문자를 구분하지 않는다.
2. 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재한는 경우에는 ?를 출력한다.
3. 대문자로 어차피 출력하기 때문에 일단 모든 소문자를 대문자로 바꾸자고 생각. (ASCII코드 이용)
4. 바꾼 후 아스키표 코드에 맞게 맞는 인덱스 번호에 카운팅. ex) AABC 입력 arr[65] = 1 -> arr[65] = 2 -> arr[66] = 1 -> arr[67] = 1
5. for문을 통한 가장 출현 빈도가 높은 알파벳을 찾고 인덱스 번호를 저장하자고 생각.
6. 단, 가장 많이 사용된 알파벳이 여러 개 존재한는 경우에는 ?를 출력한다.라는 조건에 맞게 맥스 값이 두번 이상 나오게 된다면, '?' 를 출력.
7. 아니라면 그 인덱스 번호를 문자형으로 변환하여 대문자로 출력.
● 구현
#include <iostream>
#include <string>
using namespace std;
int main() {
int max = 0, cnt = 0, index = 0,
arr[100] = {
0,
};
string str;
getline(cin, str);
for (int i = 0; i <= (str.length() - 1); i++) {
if (str[i] > 'Z')
str[i] -= 32;
arr[(int)str[i]] += 1;
}
for (int i = 65; i <= 90; i++) {
if (max < arr[i]) {
max = arr[i];
index = i;
}
}
for (int i = 65; i <= 90; i++) {
if (max == arr[i])
cnt++;
}
if (cnt > 1)
cout << "?" << endl;
else
cout << (char)index;
return 0;
}
https://www.acmicpc.net/problem/1157
반응형