Algorithm/백준(BOJ)

[Python] 1541 - 잃어버린 괄호

Gr00t 2021. 2. 8. 21:13

문제

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

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

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

입력

  • 첫째 줄에 식이 주어진다.
  • 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다.
  • 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다.
  • 수는 0으로 시작할 수 있다.
  • 입력으로 주어지는 식의 길이는 50보다 작거나 같다.

출력

  • 첫째 줄에 정답을 출력한다.

 


풀이

  • 괄호를 쳐서 값을 최소로 만들려면 -가 나오는 뒤 부분을 모두 묶어주면된다. 결국 +와 상관없이 -부호 뒤에 괄호를 계산한 값이 커져야 전체 식이 최소가 될 수 있다.
  • 따라서 이 문제는
    1. -를 기준으로 나누는 것
    1. 문자를 숫자로 잘 변환해주는 것

    두개가 핵심이라고 할 수 있다.

     

설명

  • 받은 수식을 -+를 기준으로 나눈다. ⇒ replace&split활용
  • 나눠진 배열을 돌면서 -가 나오는 순간부터 뒤는 괄호로 묶는다는 의미로 -1을 곱해서 더해준다.

 

from sys import stdin input = stdin.readline def missing_parentheses(e): ret = 0 e = e.replace('-', ' - ').replace('+', ' ') flag = 1 for i in e.split(): if i == '-': flag = -1 continue ret += int(i)*flag return ret if __name__=="__main__": expression = input().strip() res = missing_parentheses(expression) print(res)