본문 바로가기

프로그래밍_백준/C++

(C++) 백준 1157번 단어공부

728x90
반응형

 

백준 1157번 문제는 가장 많이 사용한 알파벳을 대소문자 구분 없이 나타내는 것입니다.

먼저 26개의 count 배열을 생성하고 대소문자 구분 없이 알파벳을 카운트합니다.

카운트한 값에서 최댓값을 찾고 이를 다시 반복문을 돌려 2개 이상일 경우 ?를 출력합니다.

 

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string str;
    int count[26] = { 0, };//알파벳은 총 26개입니다.
    int max_index = 0, num = 0;

    getline(cin, str);
    
    for (int i = 0; i < str.length();i++) {
        int n = str[i];
        
        if (n <= 'Z') {
            count[n - 'A']++;
        }//대문자일 경우-'A'를 합니다.
        
        else if(n <= 'z') {
            count[n - 'a']++;
        }//대문자일 경우-'a'를 합니다.

    }

    for (int i = 1; i < 26; i++) {
        max_index = (count[max_index] > count[i]) ? max_index : i;//최댓값 인덱스로 값을 비교하고 더 큰 수가 나오면 그 수를 max_index에 넣어서 다시 비교합니다.
    }
    for (int i = 0; i < 26; i++) {
        if (count[max_index] == count[i]) {
            num++;
        }//최댓값과 같은 숫자를 찾습니다.
        if (num >= 2) {
            cout << "?" << endl;
            return 0;
        }//같은 숫자가 있으면 ?를 출력합니다.
    }
    cout << (char)(max + 65);//65는 'A'의 아스키 코드입니다.
}
728x90
반응형