STUDY/Algorithm

[백준] 1541 잃어버린 괄호 python

sinawi95 2021. 5. 26. 23:09
728x90

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

expression = input()
num = ''
number = []
op = []
for ch in expression:
    if ch == '+' or ch == '-':
        op.append(ch)
        number.append(int(num))
        num = ''
    else:
        num += ch
else:
    number.append(int(num))

for i in range(1, len(number)):
    if op[i - 1] == '-' or number[i - 1] < 0:
        number[i] = -number[i]
print(sum(number))

주어진 식에서 괄호를 적당히 쳐서 가장 작은 값으로 만들면 되는 문제이다.

처음에는 마이너스 기호가 나온 이후 플러스 기호가 나오면 같은 괄호로 묶어주고, 마이너스 기호가 나오면 새로운 괄호를 설정해주는 방식으로 접근했다.

근데 머리가 안돌아가서 다 지우고 다시 작성했다.

숫자와 기호로 나눈이후 맨 처음 값을 제외하고는 플러스, 마이너스값이 정해져있다.

마이너스 값이 나온 이후의 플러스값은 괄호로 묶여서 더 큰값으로 빼주게 된다.

이 부분을 다시보니 마이너스 값이 나온 이후에는 다 마이너스 값으로 설정해도 된다고 생각이 들었다.

첫번째 값은 항상 양수이므로 반복문을 1부터 시작하고,

마이너스 기호가 나오거나 바로 이전 값이 음수인 경우 다 음수값으로 붙여주었더니 성공하였다.