💻 입력 조건

  • 첫째 줄에 0과 1로만 이루어진 문자열 S가 주어집니다. S의 길이는 100만보다 작습니다.

💻 출력 조건

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

💻 입력 예시

0001100

💻 출력 예시

1

📖 문제 해결

문제에서 '연속된 하나 이상의 숫자를 잡고 모두 뒤집는 행동'을 할 수 있다고 쓰여있으므로 하나 이상의 같은 숫자로 이루어진 배열은 하나의 숫자로 이루어진 배열로 바꾸어주었습니다. 하나 이상의 같은 숫자를 뒤집는 행동의 횟수나 하나의 숫자를 뒤집는 행동의 횟수 모두 1번으로 같기 때문입니다. (예를 들어 '000'은 '0'으로, '111111'은 '1'로 바꾸어 주었습니다.)

그리고 변형한 배열의 길이를 2로 나눈 몫을 구하였습니다. 이런 식으로 알고리즘을 구성한 이유는 다음과 같습니다. 0과 1로 이루어진 변형된 배열의 길이는 홀수 이거나 짝수가 될 수 있습니다. 길이가 홀수인 경우에는 0과 1중 더 적은 개수로 이루어진 숫자를 골라 뒤집으면 됩니다. 이때 0과 1의 개수의 차이는 변형 규칙에 의하여 1일 수밖에 없습니다. 따라서 2로 나눈 몫이 더 적은 숫자의 개수가 됩니다. 길이가 짝수인 경우에는 0과 1의 개수가 같기 때문에 어떤 것을 골라 뒤집든 행동의 최소 횟수는 같습니다.

input_ = input()

compress_input = []

for idx, item in enumerate(input_):
    
    if idx == 0:
        compress_input.append(item)
        
    elif item == compress_input[-1]:
        continue
        
    else:
        compress_input.append(item)
        
result = len(compress_input) // 2

print(result)
profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글