문제


알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

 

준비물


string - 문자열로 입력받기 위함.
toupper() - 알파벳 대소문자를 구분하지 않기 위해 모두 대문자로 바꿔주기 위함.

코드


#include <iostream>
#include <string>
#include <cctype>

using namespace std;

char Solution(string str){
    int count[26] = {0};
    int max = 0;
    char resulte;
    bool isMulti = true;

    for(int Index : str){
        Index = toupper(Index) - 'A'; 

        count[Index]++;

        if(count[Index] == max){ 
            isMulti = true;
        }
        else if(count[Index] > max){
            isMulti = false;
            max = count[Index];
            resulte = (char)(Index + 'A');
        }
    }

    if(isMulti) return '?';
    else return resulte;
}

int main(){
    string str;

    cin >> str;

    cout << Solution(str);

    return 0;
}

풀이


1. str변수로 입력받고, 문자 하나하나 조회한다 

2, 조회되는 문자는 대소문자를 구별하지 않기 위해 무조건 대문자로 변환하고, 'A'만큼 빼준다

여기서 'A'를 빼주는 이유는 count배열의 인덱스와 호환해주기 위함이다. ex) 'A'-'A'=0/'B'-'A'=1

3. count배열에 각각의 알파벳의 등장 횟수를 기록한다.

4. 큰 값이 나올 때면 max변수에 저장해주는데, 값이 같다면 isMulti변수에 중복 체크를 해준다

여기서 isMulti변수의 초기값이 true인 이유는 처음엔 알파벳이 없기 때문에 모두 중복이다

end. 이렇게 해서 최대 값과, 중복이 있는지 체크해서 문제를 풀 수 있다. 

 

TML


max의 역할과 resulte의 역할이 비슷하지 않나?

처음엔 최대 값을 알리는 max변수최고 횟수를 알리는 resulte변수를 나누지 않고 최대 값을 알리는 알파벳의 인덱스라는 변수로 합쳐 사용했지만 입력되는 문자열이 없을 때  초기값으로 무엇을 줄지 애매해서 나누었다.

그런데 굳이 바꿀 필요는 없었고 if문 한 줄 추가하면 되었겠다..

 

 

'프로그래밍 문제집 > 백준' 카테고리의 다른 글

1181번-단어 정렬  (0) 2022.01.24
1018번-체스판 다시 칠하기  (0) 2022.01.24
2675번-문자열 반복  (0) 2022.01.21
1152번-단어의 개수  (0) 2022.01.20
1463번-1로 만들기  (0) 2022.01.19

+ Recent posts