알고리즘/백준(BOJ)

백준 1157 단어공부

오뚜깅 2021. 1. 28. 01:18
반응형

이 문제 또한 ASCII 코드값을 사용하면 풀 수 있다.

 

입력되는 문자열의 소문자, 대문자는 구분하지 않고 어떤 알파벳이 몇 번 사용되었는지만 계산하는 문제이기 때문에 26사이즈의 1차원 배열을 생성한다.

 

문자가 ASCII 코드값을 사용하여 65~90 사이의 값이면 대문자로 취급, 97~122이면 소문자로 취급하여

대문자일 경우에는 문자에 65를 빼주고, 소문자면 97를 빼주어서 어떤 알파벳이 몇 번 사용되었는지만 확인하고, 가장 많이 사용된 문자를 찾는다.

 

가장 많이 사용된 문자의 등장 횟수가 다른 알파벳의 등장 횟수와 같으면 ?이고 아니면 가장 많이 사용된 문자를 출력해주면 된다.

#include <iostream>

using namespace std;

int main(){
    string s;
    cin >> s;

    int alphabet[26] = {0, };

    // ASCII CODE 
    // 65~90 대문자
    // 97~122 소문자
    for(int i = 0; i < s.size(); i++){
        if(s[i] >= 65 && s[i] <= 90)
            alphabet[s[i] - 65]++;
        if(s[i] >= 97 && s[i] <= 122)
            alphabet[s[i] - 97]++;
    }

    int max = 0;
    int maxIndex = 0;
    for(int i = 0; i < 26; i++){
        if(alphabet[i] > max){
            max = alphabet[i];
            maxIndex = i;
        }
    }

    int count = 0;
    for(int i = 0; i < 26; i++){
        if(alphabet[i] == max)
            count++;
    }

    if(count == 1)
        cout << char(maxIndex + 65);
    else
        cout << "?";

    return 0;
}
반응형