s = input()
i = 0
before = s[0]
cnt_0 = 0
cnt_1 = 0
ans = 0
while i < len(s):
##0으로 연속된 숫자들의 개수
if s[i] == "0":
while i+1 < len(s) and s[i+1] == "0":
i+=1
#마지막에 한번 더 더해지는 것 방지
if i != len(s):
cnt_0+=1
i+=1
##1으로 연속된 숫자들의 개수
elif s[i] == "1":
while i+1 < len(s) and s[i+1] == "1":
i+=1
#마지막에 한번 더 더해지는 것 방지
if i != len(s):
cnt_1+=1
i+=1
ans = min(cnt_1,cnt_0)
print(ans)
처음에는
if i != len(s):
cnt_1+=1
i+=1
이 부분을
i+=1
if i != len(s):
cnt_1+=1
이런식으로 구현을 해주었더니
1010101010과 같은 예시에서 에러가 발생했다
그 이유는 마지막 숫자가 포함된 부분은 카운트가 되지 않았기 때문이다.
그런데 사실 이 부분은 while 에서 i 가 len(s)보다 작을때에만 돌도록 구현을 해주어도 되었다.
따라서 이후에 수정을 해주어
s = input()
i = 0
before = s[0]
cnt_0 = 0
cnt_1 = 0
ans = 0
while i < len(s):
##0으로 연속된 숫자들의 개수
if s[i] == "0":
while i+1 < len(s) and s[i+1] == "0":
i+=1
cnt_0+=1
i+=1
##1으로 연속된 숫자들의 개수
elif s[i] == "1":
while i+1 < len(s) and s[i+1] == "1":
i+=1
cnt_1+=1
i+=1
ans = min(cnt_1,cnt_0)
print(ans)
이렇게 조금 더 간단하게 코드를 수정해주었다.
전체적인 해결방식은 0으로 연속된 숫자들의 개수, 1로 연속된 숫자들의 개수를 각각 구한 후 그중 최솟값을 정답으로 지정하는 방식이다.
왜냐하면 연속된 숫자가 적은 쪽을 뒤집어주면 되기때문이다.