다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.
예를 들어 S=0001100 일 때,
하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다.
문자열 S가 주어졌을 때, 다솜이가 해야하는 행동의 최소 횟수를 출력하시오.
S = input()
count0, count1 = 0, 0
prev = S[0]
for i in range(1, len(S)):
if prev != S[i]:
if prev == '0':
count0 += 1
else:
count1 += 1
prev = S[i]
if S[-1] == '0':
count0 += 1
else:
count1 += 1
print(min(count0, count1))
우선 연속된 하나 이상의 숫자… 에서 2개 이상 뒤집어야 하나 하고 생각했는데, ‘이상’의 개념에 대해서 다시 생각해보니 하나여도 되고… 그리고 책이랑 다르게 백준 거기에는 TC가 하나만 뒤집는것도 있어서 다행히 사고의 보정을 좀 해주더라… 책에 TC를 하나만 남긴것이 꽤나 실수를 할 위험을 높인다고 나는 개인적으로 생각한다… 포스텍 나온 머리 좋으신 저자 양반은 하나만 봐도 이해를 하시련지는 모르겠는데…
그리고 실수를 할 뻔 했던 부분이, 그룹 나누기에서 prev를 기준으로 count0과 count1을 선택적으로 증가시켜야 하는데, S[i] 를 기준으로 했던 것이었다… 그리고, 헷갈릴 뻔 했던 것이, 문자열이 끝날 때, 그룹의 개수를 마지막으로 증가시키는 부분이었다. 이거 안해서 큰일날 뻔 했지만, 그래도 이건 기억을 해냈다…