[BOJ 1541] 잃어버린 괄호 :: python 파이썬
일단 숫자(numbers)와 연산자(operators)를 구분해주었다.
보통 구분자를 기준으로 나눌 때 split 함수를 사용하는데, 여기서는 +, - 두 가지로 구분을 해야하기 때문에
import re 를 통해 여러 개 구분자로 split 해주었다.
아래 코드와 같이 numbers = re.split('[+-]', S) 으로 써주었다.
split 기준이 될 기호를 '[ ]' 안에 넣는 형식으로 사용한다.
문제 풀이 아이디어
최솟값이 나와야 하므로 +와 -가 있을 때 최대한 -로 계산되게 하는 것이 문제의 핵심이었다.
previous에 이전 연산자를 넣고, now에 현재 계산할 연산자를 넣은 다음, 둘을 비교하여 현재 숫자를 더할지 뺄지 결정하였다.
(1) previous = +, now = +
그대로 + 로 계산해준다. 괄호가 필요 없다.
previous와 now가 같으므로 업데이트가 필요없다.
(2) previous = +, now = -
-로 계산한 뒤, previous는 -로 업데이트한다.
(3) previous = -, now = +
-로 계산한 뒤, previous는 그대로 -로 유지한다.
1-2+3 이 주어졌을 때, 1-(2+3) 이 최솟값이다. 즉 1에서 2도 빼고 3도 빼야 한다.
괄호가 생기므로 previous는 -로 유지한다.
(4) previous = -, now = -
-로 계산한 뒤, previous와 now가 같으므로 그대로 -로 유지한다.
1-2-3 이 주어졌을 때, 괄호 없이 모두 - 로 계산하는 것이 최솟값이다.
import re
S = input()
numbers = []
operators = []
numbers = re.split('[+-]', S)
for s in S:
if s == '+' or s == '-':
operators.append(s)
answer = int(numbers[0])
previous = '+'
for i in range(len(operators)):
now = operators[i]
if previous == '+':
if now == '+':
answer += int(numbers[i+1])
else:
answer -= int(numbers[i+1])
previous = '-'
else:
answer -= int(numbers[i+1])
print(answer)
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net