끄적끄적 코딩
article thumbnail
Published 2019. 8. 25. 03:39
[C++] 백준 1439번 뒤집기 알고리즘
728x90

숫자를 전부 같게하려고 할 때 최소 몇번 바꾸면 되는지 찾는 문제입니다.
0을 1로 뒤집을 때는 뒤집으려는 0과 인접한 모든 0을 같이 뒤집을 수 있습니다.
1에서 0으로도 마찬가지입니다.

0의 더미들의 개수를 찾고
1의 더미들의 개수를 찾습니다.

그리고 더미의 수가 적은 것들을 뒤집으면 문제를 해결할 수 있기에
min함수를 통해 작은 값을 추출해서 출력했습니다.

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
	string s;
	int flag;
	int i = 0;
	int zero = 0;
	int one = 0;

	cin >> s;
	
	flag = -1;
	for (int j = 0; j < s.length(); ++j) {
		if (flag != 0 && s[j] == '0') {
			flag = 0;
			++zero;
		}
		else if (flag != 1 && s[j] == '1') {
			flag = 1;
			++one;
		}
	}
	
	cout << min(zero, one) << endl;

	return 0;
}

검색 태그