[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;
}
Reference
この問題について([boj](s 5)1439反転), 我々は、より多くの情報をここで見つけました
https://velog.io/@peanut_/boj-s5-1439-뒤집기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
最初は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;
}
Reference
この問題について([boj](s 5)1439反転), 我々は、より多くの情報をここで見つけました
https://velog.io/@peanut_/boj-s5-1439-뒤집기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#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;
}
Reference
この問題について([boj](s 5)1439反転), 我々は、より多くの情報をここで見つけました https://velog.io/@peanut_/boj-s5-1439-뒤집기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol