본문 바로가기

PS/BOJ

[C++] BOJ (백준) 1157 : 단어 공부

문제

1157번: 단어 공부 (acmicpc.net)

 

1157번: 단어 공부

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

www.acmicpc.net

코드
#include <iostream>

using namespace std;

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

    string s;
    cin >> s;
    int arr[26]{};

    for (char c : s) {
        if (c > 'Z') c -= 'a';
        else c -= 'A';
        arr[c]++;
    }

    int res;
    int max = 0;
    bool multi = false;

    for (int i = 0; i < 26; i++) {
        if (arr[i] > max) {
            res = i;
            max = arr[i];
            multi = false;
        } else if (arr[i] == max) {
            multi = true;
        }
    }

    if (multi) cout << '?';
    else cout << (char) (res + 'A');
    return 0;
}

 

설명

설명
각 알파벳이 사용된 횟수를 arr 배열에 저장한다.
이 때, 소문자와 대문자에 상관없이 저장해야하기 때문에 소문자는 'a' 만큼 빼고, 대문자는 'A' 만큼 빼주어
첫번째 인덱스부터 A의 개수, B의 개수... 이렇게 저장한다.

가장 많이 사용된 알파벳이 여러 개라면 multi 가  true가 되므로 ? 를 출력하고,
이외의 경우에는 대문자로 출력해야하므로 'A'를 더해 출력한다.