📜 접근 방법
주어진 숫자를 보고 두가지로 나눴다.
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일때 나눠서 했는데 줄여도 시간은 똑같게 나왔다..
'코딩테스트 > Python' 카테고리의 다른 글
[python 백준 1541] 잃어버린 괄호 (0) | 2023.02.02 |
---|---|
[python 백준 7662] 이중 우선순위 큐 (1) | 2023.01.29 |
[python 백준 9358] 순열 접기 게임 (0) | 2023.01.17 |
[python 백준 5052] 전화번호 목록 (0) | 2023.01.16 |
[python 백준 13904] 과제 (0) | 2023.01.15 |