문제풀이/BOJ
[Python] BOJ/백준 1541번 잃어버린 괄호
서채리
2021. 8. 20. 13:01
[문제]
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
[풀이]
수를 최솟값으로 만들기 위해서는 마이너스가 나왔을 때 가장 큰 수를 빼면 된다.
따라서 최초의 - 연산자가 나오기 전까지는 전부 더하고, - 엱산자가 나온 이후에는 전부 빼준다.
'55 - 50 + 40 - 10 + 20' 을 입력으로 받았을 때 split() 함수를 통해
expression = sys.stdin.readline().strip().split('-')
print(expression) # ['55', '50+40', '10+20']
- 를 기준으로 문자열을 나눠준다.
for i in expression[0].split('+'):
res += int(i)
expression의 맨 앞의 원소에는 최초의 - 연산자가 나오기 전까지의 숫자들로 이루어져 있기 때문에 해당 숫자들을 전부 더해 res 변수에 저장한다.
for i in expression[1:]:
for j in i.split('+'):
res -= int(j)
expression의 맨 앞 원소 이후 원소들은 전부 빼주어야 하는데, 숫자가 단독으로 한개만 있을 수도 있고 + 연산자와 같이 있는 경우도 있다. 따라서 split('+')을 통해 나온 숫자들을 전부 빼주면 된다.
[코드]
import sys
if __name__ == '__main__':
expression = sys.stdin.readline().strip().split('-')
res = 0
for i in expression[0].split('+'):
res += int(i)
for i in expression[1]:
for j in i.split('+'):
res += int(j)
print(res)