문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.
출력
첫째 줄에 정답을 출력한다.
핵심아이디어를 생각하지 못한다면 매우 복잡할 수 있는 문제이다.
핵심아이디어는 -가 등장한 이래 모든 숫자를 뺴버리는 것이다.
처음으로 -가 등장한 이후의 연산자는 중요하지 않다. 괄호처리를 통해 얼마든지 다 빼버릴 수 있기 때문이다.
또한, 처음으로 -가 등장하기 전까지는 다 더해버리면된다.
import sys
input = sys.stdin.readline
s = input().rstrip() + "!" # !는 문자열 맨마지막 체크용으로 붙여줌.
tmp = ""
answer = 0
minusAppeared = False # 이전에 -가 한번이라도 나오면 그 뒤 모든 값들 다 뺴면 최소값임.
for i in range(len(s)):
# -거나 +거나 문자열 마지막일때 체크
if( s[i] == "-" or s[i]=="+" or s[i]=="!"):
if( not minusAppeared ):
answer += int(tmp)
tmp=""
else:
answer -= int(tmp)
tmp=""
if(s[i] == "-"):
minusAppeared = True
else:
tmp += s[i]
print(answer)
'개발 > 알고리즘' 카테고리의 다른 글
10162 전자레인지 (0) | 2020.10.04 |
---|---|
1946 신입사원 (0) | 2020.10.04 |
1931 회의실배정 (0) | 2020.10.03 |
11047 동전 0 (0) | 2020.10.02 |
10282 해킹 (0) | 2020.10.02 |