[伯俊]1439:C++を反転
5149 ワード
質問リンク
https://www.acmicpc.net/problem/1439
問題を解く
入力としての文字列は0と1で構成され、最小の動作ですべて同じにする必要があります.一度にひっくり返す行動は連続する数を一度に覆すことができる.
そこで,連続数をグループ化するために文字列を順次探索し,連続割り込み部分をカウントするという考え方で問題に近づき,map containerを用いて0と1の連続数セットの個数を格納し,その最大値を出力する.
正しいコード #include<iostream>
#include<map>
using namespace std;
int main() {
string str;
map<char, int> consecutiveCnt; //연속된 수를 저장
int answer; // 최소 횟수
cin >> str;
char temp = str[0]; // 이전값을 비교하기 위한 임시변수
consecutiveCnt[temp]++;
//수가 바뀌면 해당값을 저장
for (int i = 1; i < str.size(); i++) {
if (temp != str[i]) {
consecutiveCnt[str[i]]++;
temp = str[i];
}
}
//한번도 뒤집어진 적이 없는 경우
if (consecutiveCnt.size() == 1) {
cout << 0;
}
//최솟값
else {
answer = min(consecutiveCnt['0'], consecutiveCnt['1']);
cout << answer;
}
return 0;
}
Reference
この問題について([伯俊]1439:C++を反転), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhs01459/백준-1439-뒤집기-C
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
入力としての文字列は0と1で構成され、最小の動作ですべて同じにする必要があります.一度にひっくり返す行動は連続する数を一度に覆すことができる.
そこで,連続数をグループ化するために文字列を順次探索し,連続割り込み部分をカウントするという考え方で問題に近づき,map containerを用いて0と1の連続数セットの個数を格納し,その最大値を出力する.
正しいコード #include<iostream>
#include<map>
using namespace std;
int main() {
string str;
map<char, int> consecutiveCnt; //연속된 수를 저장
int answer; // 최소 횟수
cin >> str;
char temp = str[0]; // 이전값을 비교하기 위한 임시변수
consecutiveCnt[temp]++;
//수가 바뀌면 해당값을 저장
for (int i = 1; i < str.size(); i++) {
if (temp != str[i]) {
consecutiveCnt[str[i]]++;
temp = str[i];
}
}
//한번도 뒤집어진 적이 없는 경우
if (consecutiveCnt.size() == 1) {
cout << 0;
}
//최솟값
else {
answer = min(consecutiveCnt['0'], consecutiveCnt['1']);
cout << answer;
}
return 0;
}
Reference
この問題について([伯俊]1439:C++を反転), 我々は、より多くの情報をここで見つけました
https://velog.io/@yhs01459/백준-1439-뒤집기-C
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include<iostream>
#include<map>
using namespace std;
int main() {
string str;
map<char, int> consecutiveCnt; //연속된 수를 저장
int answer; // 최소 횟수
cin >> str;
char temp = str[0]; // 이전값을 비교하기 위한 임시변수
consecutiveCnt[temp]++;
//수가 바뀌면 해당값을 저장
for (int i = 1; i < str.size(); i++) {
if (temp != str[i]) {
consecutiveCnt[str[i]]++;
temp = str[i];
}
}
//한번도 뒤집어진 적이 없는 경우
if (consecutiveCnt.size() == 1) {
cout << 0;
}
//최솟값
else {
answer = min(consecutiveCnt['0'], consecutiveCnt['1']);
cout << answer;
}
return 0;
}
Reference
この問題について([伯俊]1439:C++を反転), 我々は、より多くの情報をここで見つけました https://velog.io/@yhs01459/백준-1439-뒤집기-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol