코딩문제풀이/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)