Home [백준] 1439번 뒤집기 - Python
Post
Cancel

[백준] 1439번 뒤집기 - Python

이번에 해결해 볼 문제는 백준에 있는 1439번 뒤집기이다.


문제 설명

  1. 문자열 S가 주어졌을 때 문자열 S는 0과 1로만 이루어져있다.
  2. 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 행동을 할 수 있다.
    • 예를 들어 S = 0001100 일 때,
    • index = 0에 위치한 문자 0을 뒤집는 행동을 한다면 S는 1111100으로 뒤집힐 것이다.
  3. 모두 같은 문자(숫자)로 뒤집기 위한 행동의 최소 횟수를 출력하면 된다.

문제 해결 아이디어

  • 연속된 문자열이 적은 문자를 뒤집으면 해결된다.
    • 예를 들어 S = 0001100 일 때,
    • 0이 연속된 문자열은 2, 1이 연속된 문자열은 1이다.
    • 따라서 문자 1을 뒤집으면 된다.
  • 문자열을 반복문을 통해 하나씩 돌면서 문자가 바뀌는 횟수를 계산한다.
    • 0에서 1로 바뀌는 경우 1에 해당하는 횟수를 증가시킨다.
    • 1에서 0으로 바뀌는 경우 0에 해당하는 횟수를 증가시킨다.
    • 단, 0에 해당하는 횟수와 1에 해당하는 횟수가 모두 0일 때는 두 경우에 해당하는 횟수를 모두 증가시킨다.

문제 해결 코드

1
2
3
4
5
6
7
8
9
10
11
12
s = input().strip()
count = [0, 0]

for i in range(1, len(s)):
    if s[i-1] != s[i]:
        if count[0] == 0 and count[1] == 0:
            count[int(s[i-1])] += 1
            count[int(s[i])] += 1
        else:
            count[int(s[i])] += 1

print(min(count))

간단한 예시

This post is licensed under CC BY 4.0 by the author.

[Generative Model] StyleGAN : A Style-Based Generator Architecture for Generative Adversarial Networks

[백준] 11404번 플로이드 - Python