Algorithm/Greedy

[Python] 문자열 뒤집기

코딩쪼앙 2023. 1. 10. 18:55

문제

  • 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))

'Algorithm > Greedy' 카테고리의 다른 글

[Python] 볼링공 고르기  (0) 2023.01.16
[Python] 만들 수 없는 금액  (0) 2023.01.16
[Python] 곱하기 혹은 더하기  (0) 2023.01.09
[Python] 모험가 길드  (0) 2023.01.09
[Python] 1이 될 때까지(그리디)  (0) 2023.01.06