본문 바로가기
백준 풀이

[백준/BOJ] - 1541번 python 풀이 - 문자열

by 반오십 코린이 2023. 9. 13.
728x90

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net


괄호를 통해 +, -로만 이루어져 있는 식의 결과 값을 최솟값이 나오게 설계해야하는 문제이다.

사실상 괄호가 해당 식들에게 유의미한 영향을 줄 수 있는게 어떤 것이 있을까 생각했다.

바로 숫자 앞에 붙어있는 '-'를 무효화 할 수 있다는 것.

 

해당 문제는 만들 수 있는 최솟값을 만드는 것이 목적이므로

숫자 앞에 딸랑 붙어있는 -를 더 강력하게 괄호를 통해 더욱 더 - 값이 커지게 설정이 가능하다는 얘기!

 

결국 -를 기준으로 문자열을 잘라서 각 문자열들의 합을 크게 만들어야 결과적으로 마이너스가 크다는 얘기.

여기서 질문

맨 처음 잘린 문자열은 해당 문자열 합의 절댓값을 크게 하면 할 수록 불리해지지 않나요?

불리하긴 하다만 +를 괄호로 묶은다 한들 무효화 할 수 있는 방법이 없다.

고로 +를 신경쓰지 말고 문자열을 - 기준으로 자르면 된다.

 

다만, 주어진 식에 2칙 연산 중 + 밖에 없을 경우 예외 처리를 해줘야한다.


"""
괄호 역할이 사실상 -를 무효화 할 수 있다는 점.

30 - 100 + 55 - 50 + 40

"""
import sys
start = 0
num = []
Eq = input().split('-')

for item in Eq:
        temp = list(map(int,item.split('+')))
        num.append(sum(temp))

if len(Eq) >= 2:    
    start = num[0]
    num.pop(0)
    for i in num:
        start -= i
    print(start)
else:
     print(sum(num))
728x90