문제
- 0과 1로만 이루어진 문자열 S를 가지고 있습니다. 이 문자열 S에 있는 모든 숫자를 전부 같게 만드려 합니다
- 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것입니다.
- 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미합니다
- 예를 들어 S = 0001100일 때는 다음과 같습니다
- 1. 전체를 뒤집으면 1110011이 됩니다
- 2. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 두 번 만에 모두 같은 숫자로 만들 수 있습니다
- 하지만 처음부터 4번쨰 문자부터 5번쨰 문자까지 뒤집으면 한번에 0000000이 되어서 1번만에 같은 숫자로 만들 수 있습니다
- 문자열 S가 주어졌을 때 문자열을 뒤집는 최소 행동 횟수를 구하시오
입력
- 첫째 줄에 0과 1로만 이루어진 문자열 S가 주어집니다 S의 길이는 100만보다 작습니다
출력
- 첫쨰 줄에 다솜이가 해야 하는 행동의 최소 횟수를 출력합니다
문제 풀이
- 모든 숫자를 전부 0으로 바꾸는 경우와 전부 1로 바꾸는 경우 중 더 적은 횟수를 가지는 경우 계산
- 앞 뒤 문자열의 숫자가 다른 경우 뒤집는 횟수를 카운트 해 0과 1로 만드는 경우를 계산
- 첫 번쨰 원소를 바꾸는 경우 또한 계산
- 0과 1로 바꾸는 횟수 중 최솟값 출력
코드
s = input()
cnt_0 = 0
cnt_1 = 0
if s[0] == '1':
cnt_0 = 1
else:
cnt_1 += 1
for i in range(len(s) - 1):
if s[i] != s[i + 1]:
if s[i + 1] == '1':
cnt_0 += 1
else:
cnt_1 += 1
print(min(cnt_1, cnt_0))