문제

문제에서 뒤집는 횟수를 구하는 부분은 0에서 1로 1에서 0으로 바뀌는 처음 부분이다.
따라서 이때 0으로 바꾸거나 1로 바꾸는 횟수를 하나씩 증가시켜주어 문제를 해결할 수 있다.
input = "011110"
def find_count_to_turn_out_to_all_zero_or_all_one(string):
turn_zero = 0
turn_one = 0
if string[0] == '0':
turn_one += 1
elif string[0] == '1':
turn_zero += 1
for i in range(len(string)-1):
if string[i] != string[i+1]:
if string[i+1] == '0':
turn_one += 1
if string[i+1] == '1':
turn_zero += 1
return min(turn_zero,turn_one)
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
또한 첫번째 숫자가 0인지 1인지에 따라서도 변환하는 숫자가 추가되므로 이때도 0일경우 1로 바꾸는 횟수를 1일 경우 0으로 바꾸는 횟수를 더해준다. 그 후 for문을 들어온 숫자의 길이보다 1이 작은 횟수 만큼 돌면서 (앞, 뒤 숫자를 비교해주기 위해) 앞의 숫자와 뒤의 숫자가 같지 않은 경우 다음 숫자가 1인경우와 0인경우로 나누어 연산을 수행한다.
다음 숫자가 0이라는 것은 1로 바꾸어야 한다는 것이므로 1로 바꾸는 횟수를 추가해주고, 1인경우 0으로 바꾸는 횟수를 추가해준다. 그 후 최소값을 구하기 위해 min이라는 함수를 사용하여 가장 적은 연산을 수행한 횟수를 출력한다.
'스파르타 코딩클럽 > 1주차' 카테고리의 다른 글
| 소수 구하기 (0) | 2022.03.13 |
|---|---|
| 반복되지 않는 첫 번째 문자 출력하기 (0) | 2022.03.13 |
| 곱하거나 더해서 가장 큰 수 만들기 (0) | 2022.03.13 |
| 입력된 숫자가 존재하면 True 없으면 False 출력하기 (0) | 2022.03.13 |
| 빈도수가 높은 알파벳 출력하기 (0) | 2022.03.13 |