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