st = list(input())
answer = 0
change = False
num = ''
#초기 부호
if st[0]=='-':
sign = '-'
else:
sign = '+'
for i in range(len(st)):
# 괄호 열기
if st[i] == '-' and not change:
change = True
if sign == '-':
answer -= int(num)
else:
answer += int(num)
sign = '-' #다음 차례는 이걸로 확인
num = ''
# 부호 변경, 괄호 내부일 때
elif st[i] == '+' and change:
if sign == '-':
answer -= int(num)
else:
answer += int(num)
sign = '-' #다음 차례는 이걸로 확인
num = ''
elif st[i] == '+' and not change:
if sign == '-':
answer -= int(num)
else:
answer += int(num)
sign = '+' #괄호 안열려있을 때, +는 +그대로
num = ''
elif st[i] == '-' and change:
if sign == '-':
answer -= int(num)
else:
answer += int(num)
sign = '-' #다음 차례는 이걸로 확인
num = ''
else:
num += st[i]
# 마지막 숫자 처리
if sign == '-':
answer -= int(num)
else:
answer += int(num)
print(answer)
풀이
이게 맞네..? 근데 처리 방식을 보면 맞는것 같기도 하고..
본격적으로 코드를 작성하기 전에 어떤 경우에 괄호를 열고 닫아야하는지 확인했다. '-' 부호가 등장하는 경우, 뒷부분이 모두 '-'로 처리된다는 규칙을 찾았고, 이를 토대로 4개의 if문을 작성했다.
change는 '-'의 등장여부를 나타내고, '+'/'-'인 경우와 함께 change를 사용해서 4개의 if문이 작성되었다.
가장 헷갈렸던 부분은 sign을 처리하는 부분이었다. '+', '-'이 나올 때 answer에 값을 더하거나 빼야하는데 i 순서에서 나온 +,-로 더함과 뺄셈을 나누는 게 아니라 과거 sign을 기준으로 분류해야해서 헷갈렸다. 이 부분만 잘 처리해준다면 바로 해결될 것으로 보인다.