본문 바로가기
Algorithm 🧑🏻‍💻/백준(BOJ)

[백준,c++] 1157번 - 단어 공부

by dkswnkk 2021. 10. 28.

 

풀이1

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

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

    string s; cin >> s;
    vector<char>alphabet = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
    vector<int>check(26);
    vector<int> cnt_check(26);
    transform(s.begin(), s.end(), s.begin(), ::toupper);

    for (int i = 0; i < s.length(); i++) {
        for (int k = 0; k < alphabet.size(); k++) {
            if (s[i] == alphabet[k]) {            
                check[k]++;
                cnt_check[k]++;
                break;
            }
        }

    }
    sort(cnt_check.begin(), cnt_check.end(), greater<int>());
    if (cnt_check[0] == cnt_check[1]) cout << '?';    //가장 많이 사용된 알파벳이 여러 개 존재하는 경우
    else {
        int max_index = max_element(check.begin(), check.end()) - check.begin();
        cout << alphabet[max_index];
    }
}

풀이2

#include <iostream>
#include <string>
#include <map>

using namespace std;

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

    string s;
    cin >> s;
    char ans;
    map<char, int> m;
    bool flag = false;    //가장 많이 사된 알파벳이 여러개인 경우를 체크

    for (int i = 0; i < s.length(); i++) {
        s[i] = toupper(s[i]); //대문자로 변경
        m[s[i]]++;
    }
    int max = 0;

    for (auto i = m.begin(); i != m.end(); i++) { //제일 갯수가 많은 알파벳이 몇개인지 검사.
        if (max <= i->second) {
            max = i->second;
            ans = i->first;
        }
    }

    for (auto i = m.begin(); i != m.end(); i++) {
        if (i->second == max && ans != i->first) { //갯수가 같은데 다른 알파벳인 경우
            flag = true;
            break;
        }
    }
    if (flag) cout << "?";
    else cout << ans;
}

댓글