[boj] (b1) 1157_단어 공부

강신현·2022년 2월 4일
0

문제 링크

주어진 단어에서 가장 많이 사용된 알파벳을 출력하는 문제

#include <iostream>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    string str;
    cin >> str;

    int alps[26] = {0};

    // 대소문자를 구별하지 않고, 출력값은 대문자이므로 모두 대문자 변경
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] >= 'a' && str[i] <= 'z')
        {
            str[i] = str[i] - ('a' - 'A');
        }

        int alp = str[i] - 'A';
        alps[alp] += 1;
    }

    // 알파벳 카운팅 확인
    // for (int i = 0; i < 26; i++)
    // {
    //     cout << (char)(i + 'A') << " : " << alps[i] << '\n';
    // }

    int max = 0, max_idx = 0, cnt = 0;

    for (int i = 0; i < 26; i++)
    {
        if (alps[i] > max)
        {
            max = alps[i];
            max_idx = i;
            cnt = 0;
        }
        if (alps[i] == max)
        {
            cnt ++;
        }
        // cout << char(max_idx + 'A') << ' ' << cnt << '\n';
    }

    if (cnt > 1)
        cout << '?';
    else
        cout << char(max_idx + 'A');

    return 0;
}

위 코드에서 for문 안에

if (alps[i] > max) cnt = 0;

이 수행된 후

if (alps[i] == max) cnt ++;

이 수행되므로
cnt가 1일 때 가장 많이 사용된 알파벳이 하나 존재하는 경우임을 주의하자.
(이것 때문에 한번 틀렸다)

profile
땅콩의 모험 (server)

0개의 댓글

관련 채용 정보