jyamethyst21 님의 블로그

백준 1439번- '뒤집기' (PYTHON 풀이) 본문

CODING 💻

백준 1439번- '뒤집기' (PYTHON 풀이)

jyamethyst21 2025. 12. 10. 00:33

문제:

 

0은 1로, 1은 0으로 바꿔서 모두 동일한 숫자로 변경할건데 이때 변경하는 횟수를 저장해서 가장 적은 수인 것을 출력하면 된다.

 

 

풀이:

s = input()

zero_group = 0
one_group = 0

if s[0] == '0':
    zero_group += 1
else:
    one_group += 1

for i in range(1, len(s)):
    if s[i] != s[i-1]:
        if s[i] == '0':
            zero_group += 1
        else:
            one_group += 1

print(min(zero_group, one_group))

문자를 입력받고 0을 세는 그룹, 1을 세는 그룹을 담는 변수를 초기화해준다.

그 후 첫번째 값이 어느 그룹에 해당하는지 세기 위해서 조건문을 실행해주고 이후 반복문에 진입한다.

반복문은 이미 0번째 인덱스는 계산했으므로 1번째 인덱스부터 시작해서 1번째와 0번째 비교, ... i, i-1번째를 비교한다.

비교하면서 i와 그 이전 인덱스값이 일치하지 않게 되면 내부 if문을 실행해서 0 또는 1 그룹의 수를 1 증가시킨다.

마지막으로 해당 값들이 전부 저장되어있는 값 중 작은 수를 출력하면 해당 문제를 풀 수 있다. min을 쓰는 이유는 0을 1로 뒤집는 횟수와 1을 0으로 뒤집는 횟수를 비교해서 가장 작은 값을 출력해야 하기 때문이다.

 

한 가지 예시를 들어보겠다. 's = 010101' 일 경우다.

i                   s[i]                 s[i-1]              새 그룹 여부  새 그룹 종류

1 '1' '0' O 1 그룹 → one_group = 1
2 '0' '1' O 0 그룹 → zero_group = 2
3 '1' '0' O 1 그룹 → one_group = 2
4 '0' '1' O 0 그룹 → zero_group = 3
5 '1' '0' O 1 그룹 → one_group = 3

 

이러한 로직대로 흘러갈 것이다. 이래도 헷갈린다면 다른 값을 대입하면 될 것이다!