[boj](s 5)1439反転


グリディ

質問する


リンク


に答える


最初は1つ以上の連続文字列を数えるのは少し複雑です.
でもちょっと違うと思うなら
1つ以上の連続文字列を数えると、1つの数値が変化する境界数に等しい.
最小回数を求め、1の境界、0の境界数まで数え、その中の少ない回数を出力すればよい.

コード#コード#

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

using namespace std;

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

    string S;
    cin >> S;

    int n_0 = 0, n_1 = 0;

    for (int i = 0; i < S.length(); i++)
    {
        if(S[i] != S[i+1]){
            if(S[i]=='0') n_0++;
            else n_1++;
        }
    }

    cout << min(n_0, n_1) << "\n";

    return 0;
}