https://www.acmicpc.net/problem/1541
시간 2초, 메모리 128MB
input :
output :
조건 :
가장 최소를 만드려면 어떻게 해야 할까..
더하기를 우선적으로 다하고 빼버리면 음수 쪽으로 넘겨버릴수 있다.
'-'를 이용해서 파싱을 한 후에.
숫자의 모양이 언제나 '숫자 + 숫자' 인 것이 아니라
'숫자 + 숫자 + 숫자' 등 여러번 나올 수 있기 때문에 파싱을 할 떄 이를 리스트로 만들어서 넣자.
'+'를 가지고 있는 숫자들을 모두 더해서 temp 배열에 넣어준다.
while data:
now = data.pop(0)
if '+' in now:
in_temp = list(map(int, now.split("+")))
ret = in_temp.pop(0)
while in_temp:
a = in_temp.pop(0)
ret += a
temp.append(ret)
else:
temp.append(int(now))
그리고 더할 때는 그냥 값 1개씩 빼서 더해주고,
마지막에는 앞에서 부터 빼주면 된다.
import sys
data = list(sys.stdin.readline().rstrip().split("-"))
temp = []
while data:
now = data.pop(0)
if '+' in now:
in_temp = list(map(int, now.split("+")))
ret = in_temp.pop(0)
while in_temp:
a = in_temp.pop(0)
ret += a
temp.append(ret)
else:
temp.append(int(now))
ans = temp.pop(0)
while temp:
now = temp.pop(0)
ans -= now
print(ans)
날이 갈수록 코드가 조잡해지는 감이 없지 않아 있는데,,, 일단 뭐 더해주고, 빼줘야 하니까 뭐 어쩔 수 없다.