문제 : 알파벳 대소문자로 이루어진 단어를 입력하면, 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하라.(대소문자 구별X)
https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
주의 사항
- 대소문자를 구별하지 않는다.
- 최빈 알파벳이 두개 이상인 경우 '?'를 출력한다.
#include<iostream>
using namespace std;
int arr[26];
bool q;
int f,most,key;
string str;
void count(string s){//각 알파벳의 개수를 세는 함수
for(char & i : s){
if (i >= 'a' && i <= 'z') //소문자인 경우
i = char(i - 'a' + 'A'); //대문자로 변경
f = (int)(i-'A'); //A는 0번,B는 1번,...Z는 25번 인덱스로
arr[f]+=1;//알파벳에 해당하는 셀에 +1
}
}
void maxIndex(const int a[]){//배열의 최대값
for(int i=0;i<26;i++){
if(most==a[i])q = true;//최대값과 같은 값 있으면 q는 true
if(most<a[i]) {
most=a[i];//새로운 최대값은 i번째 값
key=i;//key는 새로운 최대값의 인덱스
q = false;//최대값보다 더 큰 값 있으면 q는 false
}
}
}
int main(){
cin>>str;
count(str);//알파벳의 개수를 세서
maxIndex(arr);//최빈값에 해당하는 인덱스를 key로
if(q) cout<<'?'<<endl;//최빈값이 두개 이상이면 ?출력
else cout<<char(key+'A')<<endl;//아니면 최빈값 대문자로 출력
return 0;
}
느낀점
- 배열의 최대값 함수를 짤 때, 최대값 인덱스에 최대값을 할당해놓고 뭐가 틀렸는지 몰라하는 멍청한 짓을 했다. 변수가 어떤 역할을 할 지 확실히 구분 해야 겠다.
'Algorithm > baekjoon' 카테고리의 다른 글
[BOJ 2346] 풍선 터뜨리기 (0) | 2022.07.20 |
---|---|
[BOJ 7785] 회사에 있는 사람 (0) | 2022.07.19 |
[BOJ 2075] N번째 큰수 (0) | 2022.07.19 |
[BOJ 1302] 베스트셀러 (0) | 2022.07.19 |
[백준 1152] 단어의 개수 (0) | 2022.06.28 |