본문 바로가기

두두의 알고리즘/문제

[탐욕법] 백준 1439번 '뒤집기' (Python)

728x90

<문제 링크>

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

 

1439번: 뒤집기

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

www.acmicpc.net


<문제 풀이>

  1. 0에서 1로, 1에서 0으로 바뀌는 지점을 파악하여 연속된 0과 1의 개수를 파악한다.
  2. s의 범위를 파악해야 하므로 바뀌는 지점을 담는 변수 change 첫 번째 값에 0을, 마지막 값에 s의 길이를 넣는다.
  3. 0과 1 중 연속된 값이 적은 것을 파악하여 개수를 출력한다.

<코드>

'''입력 예제
0001100

11111

00000001

1100110011001100001

11101101
'''

s = input()

change = [0]
for i in range(1, len(s)):
    if s[i - 1] != s[i]:
        change.append(i)
change.append(len(s))

zeros = []
ones = []

for i in range(len(change)-1):
    if s[change[i]] == '1':
        ones.append(s[change[i]:change[i + 1]])
    else:
        zeros.append(s[change[i]:change[i + 1]])

result = min(len(ones),len(zeros))
print(result)
#220321
s = input()

count = {'0':0, '1':0}

count[s[0]] += 1
r = s[0]

for i in s:
    if i!=r:
        count[i] += 1
        r = i

print(min(count.values()))

 

<고쳐야 할 점>

  • 좀 더 간결하게 코드를 작성할 수 있음