[BOJ] 잃어버린 괄호 - 1541 (S2)
시간 제한 | 메모리 제한 |
---|---|
2초 | 128 MB |
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
풀이
입력되는 부호는 ‘+’, ‘-’ 뿐이기 때문에, 최소를 만들 수 있는 방법은 간단하게 구할 수 있다.
‘-’가 등장하지 않으면 무조건 더할 수 밖에 없다.
하지만 ‘-’가 등장하는 순간부터는 괄호를 이용하여 무조건 후에 나오는 수를 뺄셈으로 만들 수 있다.
예를 들면 55-50+40+90-100+10-11 이라는 수식이 입력됐을 때 55-(50+40+90)-(100+10)-11 = 55-50-40-90-100-10-11 로 만들 수 있다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
st = input().strip()+ '+'
total = 0
minus = False
num = ''
for c in st:
if c.isdigit():
num += c
else:
if minus:
total -= int(num)
else:
total += int(num)
if c == '-':
minus = True
num = ''
print(total)
입력은 숫자와 부호가 섞인 문자열로 주어지기 때문에 그 문자열을 확인하면서 문자가 숫자인지 부호인지에 때라 다르게 처리를 해주어야 한다.
숫자
부호가 들어오기 전까지 하나의 숫자이기 때문에 문자열로 계속 이어준다.
+
만약 ‘-’ 부호가 한 번도 나오지 않았다면 더할 수 밖에 없으므로 결과가 저장될
total
에 정수로 이전까지 만들어 놓은 문자열을 정수로 바꿔 더한다.-
‘-’가 등장한 순간부터는 무조건 빼면 되기 때문에
minus
변수를True
로 바꿔준다.이후의 연산은
minus
가True
이기 때문에 이전까지 만들어 놓은 문자열을 정수로 바꿔 뺀다.