세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
첫째 줄에 정답을 출력한다.
55-50+40
-35
10+20+30+40
100
00009-00009
0
#- 연산자 뒤에 +연산자가 오는 경우가 가장 값이 작아지므로 - 연산자 기준으로 계산식을 나눔
#+ 연산자를 기준으로 나뉘는 숫자들을 더한 후, -계산을 수행함
import sys
input = sys.stdin.readline
minus_split = input().split('-')
plus_list = []
for i in minus_split:
sum = 0
temp = i.split('+')
for j in temp:
sum += int(j)
plus_list.append(sum)
n = plus_list[0]
for i in range(1, len(plus_list)):
n -= plus_list[i]
print(n)
약간의 수학적 감각이 필요한 문제였다고 생각한다. - 와 + 로 구성된 다항 연산의 값이 최소가 되려면 +로 커진 값 앞에 -가 붙어야 한다. 즉, 다항식 문자열을 -을 기준으로 나눈 후, 나뉜 문자열 내부의 수를 전부 더하고, 더한 값들끼리 뺄셈을 수행하면 값이 최소가 된다는 것이다.