백준 풀이
[백준/BOJ] - 1541번 python 풀이 - 문자열
반오십 코린이
2023. 9. 13. 14:16
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