백준 1541호 빠진 ​​괄호 – 파이썬

문제

세준이는 양수와 +, – 그리고 괄호로 표현을 했어요. 그러자 세준은 괄호를 모두 지웠다.

그런 다음 세준은 괄호를 적절하게 일치시켜 이 표현의 값을 최소화하려고 합니다.

적절한 괄호를 사용하여 이 식의 값을 최소화하는 프로그램을 작성하십시오.

기입

식은 첫 번째 줄에 있습니다.

식은 ‘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)