"""
Q. 다음과 같이 0 혹은 양의 정수로만 이루어진 배열이 있을 때,
왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며
숫자 사이에 '✕' 혹은 '+' 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하시오.
단, '+' 보다 '✕' 를 먼저 계산하는 일반적인 방식과는 달리,
모든 연산은 왼쪽에서 순서대로 이루어진다.
"""
"""
0이나 1이면 더하고, 나머지는 곱해라.
지금까지의 합계가 0이면 무조건 더해라.
"""
input = [0, 3, 5, 6, 1, 2, 4]
def find_max_plus_or_multiply(array): # O(N)
i = 0
answer = 0
while i < len(array):
if array[i] <= 1 or answer == 0:
answer += array[i]
else:
answer *= array[i]
i += 1
return answer
result = find_max_plus_or_multiply(input)
print(result)
"""
Q. 정수를 입력 했을 때, 그 정수 이하의 소수를 모두 반환하시오.
소수는 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다.
"""
def find_prime_list_under_number(number):
i = 2
answer = []
while i < number: # 2~20
j = 2
while j < i:
if i % j == 0:
# print(i, "is not prime number")
i += 1
break
j += 1
# print(i, "is prime number")
answer.append(i)
i += 1
return answer
input = 20
result = find_prime_list_under_number(input)
print(result)
"""
Q.
0과 1로만 이루어진 문자열이 주어졌을 때, 이 문자열에 있는 모든 숫자를 전부 같게 만들려고 한다.
할 수 있는 행동은 문자열에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다.
뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다.
예를 들어 S=0001100 일 때,
전체를 뒤집으면 1110011이 된다.
4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 2번 만에 모두 같은 숫자로 만들 수 있다.
하지만, 처음부터 4번째 문자부터 5번째 문자까지 문자를 뒤집으면
한 번에 0000000이 되어서 1번 만에 모두 같은 숫자로 만들 수 있다.
주어진 문자열을 모두 0 혹은 모두 1로 같게 만드는 최소 횟수를 반환하시오.
"""
def find_count_to_turn_out_to_all_zero_or_all_one(string):
divide = 1
i = 0
while i < len(string) - 1:
if string[i] != string[i + 1]:
divide += 1
i += 1
return int(divide / 2)
input = "011110" # 2
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)
input = "101101001" # 3
result = find_count_to_turn_out_to_all_zero_or_all_one(input)
print(result)