けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 357 B - Uppercase and Lowercase (7Q, 灰色, 200 点)

文字列の大文字・小文字変換もできるようにしていきたい。

問題概要

英大文字または英小文字からなる文字列  S が与えられる。

大文字の個数が小文字の個数よりも多い場合は、すべて大文字に変換し、そうでない場合はすべて小文字に変換して出力せよ。

考えたこと

まずは普通に、英大文字の個数と、英小文字の個数を数えた。それをもとに、処理を分岐した。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;
    
    int N = S.size();
    int ko = 0;
    for (auto c : S) {
        if (c >= 'a' && c <= 'z') ++ko;
    }
    int oo = N - ko;
    
    if (oo > ko) {
        for (int i = 0; i < N; ++i) {
            if (S[i] >= 'a' && S[i] <= 'z') S[i] += (int)('A') - 'a';
        }
    } else {
        for (int i = 0; i < N; ++i) {
            if (S[i] >= 'A' && S[i] <= 'Z') S[i] -= (int)('A') - 'a';
        }
    }
    
    cout << S << endl;
}