바이너리 문자열 "10011"을 제공했다고 가정해 보겠습니다. 대체 바이너리 문자열을 만들려면 최소 2자를 "10101"로 뒤집어야 합니다.
대체 문자열에는 두 가지 가능성이 있습니다. 0 또는 1로 시작합니다. 우리는 두 개의 대안을 확인하고 둘 모두에 필요한 뒤집기 횟수를 계산합니다.
그런 다음 둘 중 최소값을 반환합니다. 예를 들어 보겠습니다.
입력
binary = "10011"
출력
2
문자열을 0으로 시작하면 3번 뒤집어야 합니다. 그리고 문자열을 1로 시작하면 2번 뒤집어야 합니다. 최소값은 2입니다.
알고리즘
- 이진 문자열을 초기화합니다.
- 1부터 시작하는 문자열을 번갈아 가며 만드는 데 필요한 뒤집기 횟수를 센다.
- 0으로 시작하는 문자열을 번갈아 가며 만드는 데 필요한 뒤집기 횟수도 비슷하게 계산합니다.
- 위의 두 가지 중에서 최소값을 찾으십시오.
- 최소한을 인쇄합니다.
구현
다음은 위의 알고리즘을 C++로 구현한 것입니다.
#include <bits/stdc++.h>
using namespace std;
char flip(char binaryDigit) {
return binaryDigit == '0' ? '1' : '0';
}
int getFlipCountToAlternateString(string binary, char expected) {
int flipCount = 0;
for (int i = 0; i < binary.length(); i++) {
if (binary[i] != expected) {
flipCount++;
}
expected = flip(expected);
}
return flipCount;
}
int main() {
string binary = "10011";
cout << min(getFlipCountToAlternateString(binary, '0'), getFlipCountToAlternateString(binary, '1')) << endl;
return 0;
} 출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
2