알고리즘

[백준] 1541번: 잃어버린 괄호 파이썬 풀이

문군_ 2023. 4. 12. 16:08

 

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

문제를 간단하게 설명하자면 세준이가 바보같이 문제를 잘 만들어놓고 괄호를 지워버렸다.

이 문제에서는 무조건 숫자와 연산자가 번갈아가면서 나오기 때문에 특수한 예외상황을 신경쓰지 않아도 되었다.

 

그러면 '-' 연산자가 나오면 최대한 크게 묶어서 처리를 해주면 되겠다라고 생각이 들어서 스택을 사용해 뒤에서부터 수를 계속 더하다가 '-'가 나오면 minus 변수에 추가를 해주고 '+' 연산자까지의 부분은 plus 변수에 더해준 다음 맨 마지막에 plus - minus로 결과를 출력해주었다.

 

input_str = input()

stack = list(input_str)
result = 0
plus = 0
minus = 0
oper = ["+", "-"]
tmp_str = ""

while stack:
    tmp = stack.pop()
    if not tmp in oper:
        tmp_str = tmp + tmp_str
    else:
        if tmp == "+":
            plus += int(tmp_str)
            tmp_str = ""
        else:
            plus += int(tmp_str)
            minus += plus
            plus = 0
            tmp_str = ""
if tmp_str != "": plus += int(tmp_str)
print(plus - minus)