[이코테] 그리디 - 문자열 뒤집기

최성민·2022년 1월 27일
0


🔦 문제

다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.

예를 들어 S=0001100 일 때,

전체를 뒤집으면 1110011이 된다.
4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다.
하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면 한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다.

문자열 S가 주어졌을 때, 다솜이가 해야하는 행동의 최소 횟수를 출력하시오.


입력

첫째 줄에 문자열 S가 주어진다. S의 길이는 100만보다 작다.

출력

첫째 줄에 다솜이가 해야하는 행동의 최소 횟수를 출력한다.


✍️ 풀이

  • 0의 그룹, 1의 그룹을 판별할 수 있게 식을 짰다.

  • 000111000110000 이면 0그룹은 3개, 1그룹은 2개이다.

  • 1그룹만 0으로 바꾸면 정답이 되므로 답은 2


🛠 나의 코드

s = input()
count_0 = 0
count_1 = 0
if s[0] == '0':
    temp ='0'
    count_0 =1
if s[0] == '1':
    temp='1'
    count_1 =1

for i in s[1:]:
    if i != temp:
        if i == '0':
            count_0 +=1
            temp = '0'
        if i == '1':
            count_1 +=1
            temp = '1'

print(min(count_0,count_1))

🎈 책 정보

이것이 취업을 위한 코딩테스트다 with 파이썬

0개의 댓글