본문 바로가기
코딩테스트/Python

[python 백준 1439] 뒤집기

by nahkim 2023. 1. 25.

📜 접근 방법

주어진 숫자를 보고 두가지로 나눴다.

1. 모든 숫자를 0으로 뒤집을 경우 (ex)000000)

2. 모든 숫자를 1로 뒤집을 경우 (ex)111111)

 

위의 경우를 보고

첫번째의 경우: 1이면 count + 1

두번째의 경우 : 0이면 count + 1

단, 이전 숫자가 현재 숫자와 같으면 count하지 않는다. (연속되는 수가 같을 경우)

 

ex) 0001100

첫번째 경우

4번째(1)에서 count한다.

5번째(1)에선 이전 숫자(1)가 같기 때문에 count 안한다. => 총 1번

 

두번째 경우

첫번째(0)에서 count한다. + 1

두번째, 세번째에선 count 하지 않음(이전 숫자와 같으니 이미 count가 되어있음)

6번째(0)에서 count한다. + 1

6번째(0)에서 count하지 않는다.

=> 총 2번

 

그중 최소값 => 1번

 

 

❌ 실패 코드

처음에는 배열에 넣지 않고 하다가 맨 처음 값이 내가 찾으려던 값이면 이전 값을 어떻게 넣을지 방법이 안보여서 배열에 넣었다.

 

 

✅ 정답 코드

import sys

n = sys.stdin.readline().strip()

arr = []

for i in n:
    arr.append(i)

check_zero = "0"
check_one = "1"
count_zero_start = 0
count_one_start = 0

before_num = arr[0]
if arr[0] == '1':
    count_zero_start += 1
else:
    count_one_start += 1
for i in range(1, len(arr)):
    # 1이면 count 추가
    if check_zero != arr[i]:
        count_zero_start += 1
        if before_num == arr[i]:
            count_zero_start -= 1
    # 0이면 count 추가
    elif check_one != arr[i]:
        count_one_start += 1
        if before_num == arr[i]:
            count_one_start -= 1
    before_num = arr[i]

print(min(count_zero_start, count_one_start))

 

 

💡알게 된점

원래 for문 2개 돌려서 1일때, 0일때 나눠서 했는데 줄여도 시간은 똑같게 나왔다..