본문 바로가기
알고리즘/그리디

[Python] 백준 1439 뒤집기

by JayAlex07 2023. 1. 25.

🧑‍💻 [Python] 백준 1439 뒤집기

Gold 5 - 그리디

null

문자열은 0과 1 밖에 없다

연속된 숫자들을 뒤집는 것이고, 최소한으로 뒤집는 것이 목표

 

즉 0000011111000001100 은 01010 과 똑같다

 

 

문제풀이 (처음 풀이, 틀림)

  • one , zero라는 변수를 만들어 0으로 초기화 시켰다
  • 문자열을 순회하며, 문자열이 바뀔 때 마다, 1이면 one에 1을 더하고, 0이면 zero에 1을 더했다
  • 경우의 수
    • one이 0이고, zero가 0일 때에, 숫자를 뒤집지 않아도 되서 0을 출력
    • one만 0이면 zero 값인 1을 출력
    • zero만 0이면, one 값인 1을 출력
    • zeroone이 0이 아니면, 둘 중에 작은 것을 출력

 

문제풀이 (두번째)

  • 000001110000110110 은 0101010과 같다
  • 즉 문자열을 순회하며, 숫자가 바뀔때마다 count에 1씩 더해주면 된다
  • 그리고 count + 1을 한 것을 2로 나누어, 몫을 출력하면 답이 된다

 

코드

 

첫 번째 풀이

numbers = input()

zero = 0
one = 0

if len(numbers) > 1:
    for i in range(1, len(numbers)):
        if numbers[i] != numbers[i-1]:
            if numbers[i-1] == '0':
                zero += 1
            else:
                one += 1

if zero == 0 and one == 0:
    print(0)
elif zero == 0:
    print(one)
elif one == 0:
    print(zero)
else:
    print(min(one,zero))

 

두 번째 풀이

numbers = input()

count = 0

for i in range(len(numbers) - 1):
    if numbers[i] != numbers[i+1]:
        count += 1

print((count + 1) // 2)