[伯俊]1439:C++を反転


質問リンク


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;
}