문제

boj1439

0과 1들의 그룹수를 계산하면 되는 문제이다.

전에 코테에서 이 문제의 어려운 버전을 풀어본 적이 있다. 그때는 각 그룹 별로 몇 개의 수가 있는지까지 계산해야 해서 조금 복잡하기도 했고 마지막을 잘 처리하지 못해 테케를 몇 개 통과하지 못했었다.

이런 문제를 풀 때는 바로 앞의 값과 비교해 다른 경우에만 count하고 flag 다시 설정하는 방식으로 풀면 된다. 그리고 시작과 마지막 예외처리 해주기!

#include <iostream>
#include <string>
using namespace std;

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

	string S;
	int i, size;
	int one_group = 0, zero_group = 0;
	bool is_one = false;

	cin >> S;
	size = S.size();

	if (S[0] == '1') is_one = true;
	for (i = 1; i < size; i++) {
		if (S[i] != S[i - 1]) {
			if (is_one) one_group++;
			else zero_group++;
			is_one = !is_one;
		}
	}
	if (S[size - 1] == '0' && !is_one) zero_group++;
	else if (S[size - 1] == '1' && is_one) one_group++;

	cout << ((zero_group < one_group) ? zero_group : one_group) << endl;
	return 0;
}