문제
세준이는 양수와 +, – 그리고 괄호로 표현을 했어요. 그러자 세준은 괄호를 모두 지웠다.
그런 다음 세준은 괄호를 적절하게 일치시켜 이 표현의 값을 최소화하려고 합니다.
적절한 괄호를 사용하여 이 식의 값을 최소화하는 프로그램을 작성하십시오.
기입
식은 첫 번째 줄에 있습니다.
식은 ‘0’~’9′, ‘+’, ‘-‘로만 구성되며 처음과 마지막 문자는 숫자입니다.
그리고 2개 이상의 연산자가 연속적으로 나타나지 않으며, 5개 이상의 연속된 숫자가 있는 숫자도 없습니다.
숫자는 0부터 시작할 수 있습니다.
입력으로 지정된 표현식의 길이가 50보다 작거나 같습니다.
누르다
답을 첫 번째 줄에 인쇄하십시오.
예시 입력 1
55-50+40
예제 출력 1
-35
샘플 입력 2
10+20+30+40
샘플 출력 2
100
샘플 입력 3
00009-00009
샘플 출력 3
0
이 문제를 해결할 때 고려해야 할 두 가지 사항이 있습니다.
1. 조건의 첫 번째와 마지막 숫자는 첫 번째와 마지막 숫자에 -가 없다는 의미입니다.
2. 첫 번째 값은 + 값이어야 하며, 그 뒤에 -가 나타나면 -가 다시 나타나 최소값이 될 때까지 +에 더하는 연산을 괄호로 묶어야 합니다.
즉, 예를 들어 10+30-50+25+40+50+60-70-20이면,
(10+30), (50+25+40+50+60), (70), (20)을 보면 -95의 최소값인 (40 – (225) + 70 + 20)이 된다.
.
‘-‘ 단위를 먼저 묶으면 -의 밑 부분을 괄호로 묶을 수 있습니다.
그 후에는 나중에 그 안에 있는 값을 더할지 뺄지를 파악하고 계산을 하면 됩니다.
괄호 안의 값은 연산 기호 값(플러스 또는 마이너스)을 설정하여 나중에 더할지 뺄지를 결정하여 나중에 최소값을 계산할 때 고려하도록 했습니다.
사실 완전한 플러스 값은 첫 번째 인덱스부터 전개가 끝날 때까지 +일 때만 양의 값이고 -에 있는 값이 중간에 한 번이라도 나온다면 +의 의미는 괄호에 종속되어야 한다.
– 그때부터는 상태 값이 필요하지 않게 됩니다.
(1)이 없으면 추가된 값은 -로 볼 수 있는데, 코드를 쉽게 하기 위해 연산 문자 값(더하기, 빼기)을 삽입하여 표현했습니다.
읽다.
코드는 다음과 같습니다.
Problem = input()
splitedProblemByMinus = Problem.split("-")
for idx in range(len(splitedProblemByMinus)):
if idx >= 1:
splitedProblemByMinus(idx) = (splitedProblemByMinus(idx), 'minus')
else:
splitedProblemByMinus(idx) = (splitedProblemByMinus(idx), 'plus')
for idx, element in enumerate(splitedProblemByMinus):
splitedProblemByMinus(idx)(0) = element(0).split('+')
cur = 0
for element in splitedProblemByMinus:
tmp = 0
for i in element(0):
tmp += int(i)
if element(1) == 'minus':
tmp = tmp * -1
cur += tmp
print(cur)