알고리즘/백준
[Python] 백준(BOJ): 1541 잃어버린 괄호
soheeeeP
2021. 10. 24. 16:18
문제
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
풀이
수식의 합이 최소가 되도록 계산해야 하는 문자열 greedy 문제이다.
a. 풀이
수식의 합이 최소가 되기 위해서는 - 연산자 뒤의 부분 수식의 값이 최대가 되어야 한다.
따라서 - 연산자를 기준으로 parsing을 수행했다.
- 수식에 + 연산자만 남아있다면 남아있는 수를 모두 더하고 break
- - 연산자가 존재한다면, 해당 index 이후의 부분수식(_data)을 수식(data)에서 제거한 뒤 부분 수식에 대한 합연산을 수행하는 것을 반복
data = input()
answer = 0
# 연산할 값이 남아있을때까지 계산
while data:
# 수식에 더하기 연산만 있는 경우, 덧셈만 수행하고 바로 return
if '-' not in data:
num = [i for i in map(int, data.split('+'))]
answer += sum(num)
break
for x in reversed(range(len(data))):
if data[x] == '-':
_data = data[x+1:]
data = data[:x]
break
num = [i for i in map(int, _data.split('+'))]
answer -= sum(num)
print(answer)