문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다.
그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다.
그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다.
수는 0으로 시작할 수 있다.
입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1
55-50+40
예제 출력 1
-35
풀이
# 나의 바보 풀이
from collections import deque
question = list(input())
queue = deque()
result = 0
multiply = 1
for ques in reversed(question):
if ord(ques)==45: # if -
question.pop()
while queue:
element = queue.popleft()
if ord(element)==43:
multiply = 1
else:
num = int(element)
result += -1 * num * multiply
multiply *= 10
multiply = 1
else:
queue.append(question.pop())
multiply = 1
while queue:
element = queue.popleft()
if ord(element)==43:
multiply = 1
else:
num = int(element)
result += num*multiply
multiply *= 10
print(result)
data = input().split('-')
result = 0
for num in data[0].split('+'):
result += int(num)
for plus in data[1:]:
for num in plus.split("+"):
result -= int(num)
print(result)
문제해설
문자열 처리 연습하기 좋은 문제인 것 같다.
'알고리즘 > 그리디' 카테고리의 다른 글
[백준] 13305번, 주유소 (파이썬) (0) | 2021.05.04 |
---|---|
[백준] 11399번, ATM (파이썬) (0) | 2021.05.04 |
[백준] 1931번, 회의실 배정 (파이썬) (0) | 2021.05.04 |
[백준] 11047번, 동전0 (파이썬) (0) | 2021.05.03 |
[2018 E 기업 알고리즘 대회] 1이 될 때까지 (파이썬) (0) | 2021.05.03 |