# Q.
# 0과 1로만 이루어진 문자열이 주어졌을 때,
# 이 문자열에 있는 모든 숫자를 전부 같게 만들려고 한다.
# 할 수 있는 행동은 문자열에서 연속된 하나
# 이상의 숫자를 잡고 모두 뒤집는 것이다.
# 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.
# 예를 들어 S=0001100 일 때,
# 전체를 뒤집으면 1110011이 된다.
# 4번째 문자부터 5번째 문자까지
# 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다.
# 하지만, 처음부터 4번째 문자부터 5번째 문자까지
# 문자를 뒤집으면 한 번에 0000000이 되어서
# 1번 만에 모두 같은 숫자로 만들 수 있다.
# 주어진 문자열을 모두 0 혹은 모두 1로 같게 만드는
# 최소 횟수를 반환하시오.
input = "01111010"
def find_count_to_turn_out_to_all_zero_or_all_one(string):
count_zero_to_one = 0
count_one_to_zero = 0
for i in range(len(string)-1):
if string[i] =='0' and string[i+1] =='1':
count_zero_to_one +=1
elif string[i] == '1' and string[i+1] == '0':
count_one_to_zero += 1
if count_one_to_zero >= count_zero_to_one:
return count_one_to_zero
elif count_zero_to_one >= count_one_to_zero:
return count_zero_to_one
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
다른 풀이
input = "011110"
def find_count_to_turn_out_to_all_zero_or_all_one(string):
count_to_all_zero = 0
count_to_all_one = 0
if string[0] == '0':
count_to_all_one += 1
elif string[0] == '1':
count_to_all_zero += 1
for i in range(len(string) - 1):
if string[i] != string[i + 1]:
if string[i + 1] == '0':
count_to_all_one += 1
if string[i + 1] == '1':
count_to_all_zero += 1
return min(count_to_all_one, count_to_all_zero)
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
728x90
'알고리즘 > 이론' 카테고리의 다른 글
[알고리즘] 링크드리스트 add_node구현 (0) | 2021.06.13 |
---|---|
[알고리즘] 링크드 리스트 append 구현 (0) | 2021.06.13 |
[알고리즘] 소수 나열하기/ 소수 찾기 (0) | 2021.06.12 |
[알고리즘] 공간복잡도 파악하기 (0) | 2021.06.12 |
[알고리즘] 문자열에서 알파벳 중에 가장 많이 나온 알파벳 찾기/ 최빈값 찾기 python (0) | 2021.06.12 |