Problem
https://www.acmicpc.net/problem/1157
알파벳 대소문자로 된 단어가 주어질 때, 이 단어에서 가장 많이 사용된 알파벳을 출력한다. 가장 많이 사용된 알파벳이 여러 개 존재하는 경우 '?'를 출력한다. 대문자와 소문자를 구분하지 않는다.
Solution
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int arr[26]={0,}; // 배열 0으로 초기화
string s;
cin >> s;
for(int i=0;i<s.length();i++){
// 소문자를 대문자로 바꿔줌 (아스키코드 이용)
if(s[i]>='a' && s[i]<='z'){
s[i] = s[i]-32;
}
// 빈도수 구하기 (A의 경우 arr[0])
arr[s[i]-'A']++;
}
// 최대 빈도수 구하기
int max = 0;
max = *max_element(arr,arr+26);
// 중복된 빈도수가 있는지 체크
int cnt = 0;
int result;
for(int i=0;i<26;i++){
if(arr[i]==max){
result = i;
cnt++;
}
}
if(cnt==1)
cout << char('A'+result) << '\n';
else
cout << '?' << '\n';
return 0;
}
- 아스키코드표에 따르면, 소문자를 나타내는 숫자에서 32를 빼면 대문자를 나타내는 숫자로 표현할 수 있다.
- max_element(배열 또는 벡터) 함수는 값 자체를 리턴하지 않고 그 값의 주소를 리턴하기 때문에 값을 참조하려면 *를 붙여줘야 한다.
'코딩 테스트 > 백준 (C++, Python)' 카테고리의 다른 글
cpp) 백준 11650: 좌표 정렬하기 (0) | 2023.06.08 |
---|---|
cpp) 백준 11050: 이항 계수 1 (0) | 2023.06.08 |
cpp) 백준 1929: 소수 구하기 (1) | 2023.06.08 |
cpp) 백준 11005: 진법 변환 2 (0) | 2023.06.08 |
cpp) 백준 2745: 진법 변환 (0) | 2023.06.07 |