이진 문자열 s가 있다고 가정하고 이제 비트를 선택하고 그 값을 0에서 1로 또는 그 반대로 뒤집는 작업을 고려해 보겠습니다. 3개의 동일한 연속 비트가 없는 문자열을 얻는 데 필요한 최소 연산 수를 찾아야 합니다.
따라서 입력이 s ="10011100"과 같으면 출력은 1이 됩니다. 인덱스 4에서 비트를 1에서 0으로 바꿔 문자열 "10010100"을 세 개의 연속적인 동일한 비트가 없도록 할 수 있기 때문입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- l :=0, 개수 :=0
- l
- r :=l
- r
- r :=r + 1
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(s): l = 0 count = 0 while l < len(s): r = l while r < len(s) and s[r] == s[l]: r += 1 count += (r - l) // 3 l = r return count s = "10011100" print(solve(s))
입력
"10011100"
출력
1