문제 : 알파벳 대소문자로 이루어진 단어를 입력하면, 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하라.(대소문자 구별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

+ Recent posts