백준/백준 단계별 문제풀이

백준 1157번 (C++)

FDEE 2020. 8. 22. 18:43

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

 

<답안>

#include <iostream>

using namespace std;

int main() {

    int count[26] = {0};

    int temp, max = 0;

    int maxCount = 0;

    int index = 0;

    //Z : 90

    string input;

    cin>>input;

    for(int i=0; i<input.size(); i++)

    {

        temp = (int)input.at(i);

        //소문자

        if(temp > 90)

        {

            count[temp-97]++;

            if(count[temp-97] > max)

                max = count[temp-97];

        }

        //대문자

        else

        {

            count[temp-65]++;

            if(count[temp-65] > max)

                max = count[temp-65];

        }

    }

    

    for(int i=0; i<26; i++)

    {

        if(count[i] == max)

        {

            maxCount++;

            index = i;

        }

            

    }

    if(maxCount > 1)

        cout<<"?";

    else

        cout<<(char)(index+65);

    

    return 0;

}

 

<설명>

string 형태의 input을 입력받는다

인덱스 i=0 ~ size()-1까지 증가시키며 int 형변환 값을 temp에 저장한다

소문자 a : 97 ~ z : 122 / 대문자 A : 65 ~ Z : 90 이므로

temp가 90보다 큰 경우 소문자이고, 그외는 대문자이다

소문자 - 97 의 경우 a -> 0, z -> 25로 변환된다

대문자 - 65 의 경우 A -> 0, Z -> 25로 변환된다

 

변환된 숫자값을 인덱스로 하여 count 배열의 수를 증가시켜 개수를 센다

동시에 max값을 비교하여 count의 최대값을 저장한다

 

그리고 max값이 동일한 문자가 있는지 판별을 위해

인덱스 i=0부터 25까지 증가시키며 count[i]값이 max와 같은경우

maxCount를 증가시키며 해당문자를 찾기위한 인덱스 i값을 index로 저장한다

 

만약 maxCount값이 1보다 큰 경우는 두글자 이상이 max값이 같다는 뜻이므로 ?를 출력한다

그 외의 경우(maxCount = 1) index + 65를 통해 문자로 바꾸어 출력한다 (0 -> A)

 

'백준 > 백준 단계별 문제풀이' 카테고리의 다른 글

백준 2908번 (C++)  (0) 2020.08.22
백준 1152번 (C++)  (0) 2020.08.22
백준 2675번 (C++)  (0) 2020.08.22
백준 10809번 (C++)  (0) 2020.08.22
백준 11720번 (C++)  (0) 2020.08.22