728x90
반응형
📒 문제
🤸♀️ 문제 분석
연속되는 숫자의 묶음이 적은 수를 뒤집는 것이 유리하다.
💡 즉, 문자열에서 모든 수를 0으로 만드는 경우와 1로 만드는 경우를 비교하여 둘 중 행동이 적은 값을 선택하면 된다.
구하는 방법은 코드에서 확인할 수 있다.
🧮코드
def string_swap(numbers):
# 0혹은 1의 문자열을 뒤집어서 1또는 0으로 통일되기 위한 횟수
swap_to_zero = 0
swap_to_one = 0
# 매번 비교대상의 숫자 (처음에는 맨 앞 숫자)
temp = numbers[0]
# 처음에는 맨 앞 숫자값가 아닌 값을 1로 세팅
if temp == '0':
swap_to_one = 1
else:
swap_to_zero = 1
# 입력 숫자를 첫번째 숫자 제외하고 하나씩 확인
for n in numbers[1:]:
# 1) 0을 1로 만들기
# -> n이 0이고, 비교대상 숫자와 다르면 swap_to_one+1
# -> 비교대상 숫자와 동일할 경우 한번에 뒤집을 수 있기 때문에 +1 안해준다
if n == '0' and temp != n:
swap_to_one += 1
# 2) 1을 0으로 만들기
elif n == '1' and temp != n:
swap_to_zero += 1
# 비교대상 숫자를 다시 현재값으로 할당
temp = n
# print(f'swap_to_zero={swap_to_zero}')
# print(f'swap_to_one={swap_to_one}')
return min(swap_to_one, swap_to_zero)
n = input()
print(string_swap(n))
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/Python] 2839 설탕배달 | DP(다이나믹 프로그래밍) (3) | 2022.03.31 |
---|---|
[백준/Python] 2579 계단오르기 | 다이나믹프로그래밍(DP) (0) | 2022.03.30 |
[백준/Python] 1901 회의실 배정 | 그리디(greedy) (0) | 2022.03.28 |
[백준/Python] 11047 동전0 | 그리디(greedy) (0) | 2022.03.28 |
python | 모험가길드 | 그리디(greedy) (0) | 2022.03.23 |