바이너리 문자열 "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