사칙연산에서 더하기(+)는 결합법칙이 성립하지만, 빼기(-)는 결합법칙이 성립하지 않습니다.
예를 들어 식 1 - 5 - 3은 연산 순서에 따라 다음과 같이 다른 결과를 가집니다.
위 예시와 같이 뺄셈은 연산 순서에 따라 그 결과가 바뀔 수 있습니다.
또 다른 예로 식 1 - 3 + 5 - 8은 연산 순서에 따라 다음과 같이 5가지 결과가 나옵니다.
위와 같이 서로 다른 연산 순서의 계산 결과는 [-15, -5, -5, 1, 1]
이 되며, 이중 최댓값은 1입니다.
문자열 형태의 숫자와, 더하기 기호("+"), 뺄셈 기호("-")가 들어있는 배열 arr가 매개변수로 주어질 때, 서로 다른 연산순서의 계산 결과 중 최댓값을 return 하도록 solution 함수를 완성해 주세요.
arr | result |
---|---|
["1", "-", "3", "+", "5", "-", "8"] | 1 |
["5", "-", "3", "+", "1", "+", "2", "-", "4] | 3 |
a + b + c - e + f - g - h + ...
이 식은 아래와 같이 구할 수 있다.[+ b + c - e + f - g - h + ...]의 최대값
[+ c - e + f - g - h + ...]의 최대값
]의 최대값[- e + f - g - h + ...]의 최대값
]의 최대값]의 최대값+
연산으로 진행된 값의 합+
인 경우 : 덧셈의 경우 결합 법칙이 적용되므로 추가적인 연산이 필요없다.-
인 경우 : 해당 단계에서 계산되는 최소값, 최대값을 계산한다.숫자
인 경우 : sum_value에 값을 더한다.# 코드
def solution(arr):
min_max = [0, 0]
sum_value = 0
for idx in range(len(arr) - 1, -1, -1):
if arr[idx] == '+':
continue
elif arr[idx] == '-':
temp_min, temp_max = min_max
min_max[0] = min(-(sum_value + temp_max), -sum_value + temp_min)
temp_value = int(arr[idx+1])
min_max[1] = max(-(sum_value+temp_min), -temp_value+(sum_value-temp_value) + temp_max)
sum_value = 0
else:
sum_value += int(arr[idx])
answer = sum_value + min_max[1]
return answer