문제
풀이
일단 문제를 먼저 분석해보자.
+
, -
만 존재하기 때문에 이 둘 사이의 규칙을 잘 파악하면 된다.-
가 등장했을 경우, 다음으로 -
가 나오기 전까지 괄호로 묶어 빼는 값이 커지도록 하면 된다. 즉, 빼는 수를 최대로 만들어주면 된다. 이러한 개념을 토대로 작성한 코드는 다음과 같다.
ord()-아스키코드값으로 변환
메소드를 사용하였다. -
가 나오게 되면, 다음 -
가 나올 때 까지의 수는 모두 더하여 빼주는 알고리즘 이다,import sys
inputData = sys.stdin.readline().strip()
operand = []
operator = []
temp = ""
for ch in inputData:
if ord(ch) >= 48 and ord(ch) <= 57:
temp += ch
else:
operator.append(ch)
operand.append(int(temp))
temp = ""
operand.append(int(temp))
result = operand.pop(0)
tempsum = 0
flag = 0
while(len(operand) != 0):
opt = operator.pop(0)
if opt == '-':
if flag == 1:
result -= tempsum
tempsum = 0
flag = 1
tempsum += operand.pop(0)
else:
if flag == 0:
result += operand.pop(0)
else:
tempsum += operand.pop(0)
result -= tempsum
print(result)
결론
문제를 푸는 것이 어렵지는 않았지만, 풀고 난 뒤에 다른 사람들의 풀이를 보니 다양한 생각이 존재하고, 더 효율적인 방법도 있다는 것을 알게 되었다. 이렇게 내가 직접 풀고 남의 풀이를 비교해보는 것도 실력향상에 큰 도움이 되는 것 같다.