[C++]백준1439번 뒤집기

less than 1 minute read

오늘은 백준1439번 뒤집기 문제를 풀어보도록 하자.

실버5 짜리로 굉장히 EZ한 문제라고 할 수 있겠다요 :)

문제는 다음과 같다.

                               [접근법]

  1. for문을 2번 돌려준다. 하나는 다 0이라고 가정했을 때, 또 하나는 다 1이라고 가정했을 때 최솟값을 구하는 것이다.

  2. 먼저 다 1이라고 가정해볼 때, 0의 더미 갯수를 파악. 그리고 다음에는 다 0이라고 가정해볼 때, 1의 더미 갯수를 파악한다.
  
  3. 그 후 최솟값을 도출해내면 끝 ! 
                                     [코드]
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
	string s;
	bool flag = false;
	int result = 0, tmp;

	cin >> s;

	for (int i = 0; i < s.length(); i++) {
		if (s[i] == '0') {
			if (!flag) {
				result++;
				flag = true;
			}
		}
		else {
			flag = false;
		}
	}
	tmp = result;
	result = 0;
	flag = false;
	for (int i = 0; i < s.length(); i++) {
		if (s[i] == '1') {
			if (!flag) {
				result++;
				flag = true;
			}
		}
		else {
			flag = false;
		}
	}
	result = min(tmp, result);
	cout << result << '\n';
	return 0;
}