알고리즘/그리디

[백준] 1541번, 잃어버린 기호 (파이썬)

Jaden Park 2021. 5. 4. 15:49

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다.

그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

 

입력

첫째 줄에 식이 주어진다. 식은 ‘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)

 

문제해설

문자열 처리 연습하기 좋은 문제인 것 같다.