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;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 2139번 나는 너가 살아온 날을 알고 있다 (0) | 2019.08.25 |
---|---|
[C++] 백준 2455번 지능형 기차 (0) | 2019.08.25 |
[C++] 백준 5585번 거스름돈 (0) | 2019.08.25 |
[C++] 백준 2747번 피보나치 수 (0) | 2019.08.24 |
[C++] 백준 15726번 이칙연산 (0) | 2019.08.24 |