코딩문제풀이/Baekjoon
[Python_Greedy] 백준 1541번 : 잃어버린 괄호
코딩하는 포메라니안
2021. 8. 2. 21:11
1. 문제
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
2. 풀이 과정
주어진 식에서 빼기가 있다면 괄호를 묶어 뒤에 나오는 모든 수를 빼기 연산으로 만들 수 있다.
따라서 식의 값을 최소로 만드는 방법은 식에서 처음 나오는 빼기 뒤의 수들을 모두 뺄셈 연산을 수행해주면 된다.
예) 50+10-30+10+20-30+10 = 50+10-(30+10+20)-(30+10) 으로 묶어보면 분배 법칙을 통해 '-'를 다 적용해줄 수 있다.
s = input()
def sum_value(a):#무조건 더하기 연산
result = 0
b = 1
for i in range(len(a))[::-1]:
if a[i] != '+' and a[i] != '-':
result += int(a[i]) * b
b*=10
else:
b = 1
return result
if '-' in s: #빼기가 있는 식이면
c = s.index('-')
r = sum_value(s[:c])-sum_value(s[c+1:])
else: # 빼기가 없는 식이면
r = sum_value(s)
print(r)