새소식

PS/백준

[백준/1439] 뒤집기 (Python)

  • -

Problem : https://www.acmicpc.net/problem/1439

 

1439번: 뒤집기

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

www.acmicpc.net

Difficulty : Silver 5

 

Status : Solved

 

Time : 00:02:49

 


 

문제 설명

 

더보기

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

예를 들어 S=0001100 일 때,

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

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

 

 

입력 및 출력

 

더보기

입력

 

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

 

출력

 

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

 

입력 예시

0001100

 

출력 예시

1

 

 


 

풀이

 

그리디하게 생각해보면 된다. 연속된 숫자 묶음을 뒤집는 게 가장 이득이므로, 연속된 1 뭉치, 연속된 0 뭉치 중 더 적은 뭉치가 최소 뒤집기 횟수이다.

 

풀이 코드

string = input().strip()
count_dict = { '0' : 0, '1' : 0 }
cur = string[0]
count_dict[cur] += 1

for s in string[1:] :
  if cur != s :
    count_dict[s] += 1
    cur = s
print(min(count_dict.values()))

풀이 완료!

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.