[boj] (b1) 1157 단어 공부

강신현·2022년 3월 31일
0

문제

링크

풀이

단어의 알파벳을 하나씩 세어 알파벳 개수 배열에 저장해두고 완전탐색으로 가장 많은 개수인 알파벳을 구하면 된다.

주의할점

  1. 대문자와 소문자를 구분하지 않으므로 굳이 따로 세어줄 필요가 없다.
    결과값은 대문자로 출력하라고 했으므로 처음에 모두 대문자로 변환해주면 됨
  2. 가장 많은 개수를 찾는 반복문에서
    첫번째 조건문에서 가장 많이 사용된 알파벳이 여러 개 존재하는 경우 판별하는 변수인 flag를 ++ 해준 뒤
    두번째 조건문으로 넘겨주기 때문에 가장 많이 사용된 알파벳이 여러 개인 경우는 flag가 2 이상 부터이다.

코드

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

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

    int alp[26];
    fill(alp, alp + 26, 0);

    string str;
    cin >> str;

    for(int i=0;i<str.length();i++){
        if(str[i] >= 'a' && str[i] <= 'z') str[i] -= ('a'-'A'); // 대문자로 변환
        alp[int(str[i] - 'A')]++; // 카운트
    }

    int max_alp_idx = -1, max_cnt = -1, flag = 0;
    for (int i = 0; i < 26; i++)
    {
        if (max_cnt < alp[i]){
            max_alp_idx = i;
            max_cnt = alp[i];
            flag = 0;
        }
        if (max_cnt == alp[i])
            flag ++; // 가장 많이 사용된 알파벳이 여러 개 존재하는 경우 판별
    }

    if (flag >= 2)
        cout << "?" << "\n"; // 위 반복문 첫번째 조건문에서 flag가 ++ 된 후 아래 주건문에 들어가므로 가장 많이 사용된 알파벳이 여러 개 존재하는 경우는 flag가 2부터
    else
        cout << char(max_alp_idx + 'A') << "\n";

    return 0;
}
profile
땅콩의 모험 (server)

0개의 댓글