세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
첫째 줄에 정답을 출력한다.
def solution():
inp = list(map(str, input().split('-')))
answer = 0
for i in range(len(inp)):
temp = eval(inp[i])
answer += (-1)**i * temp
return answer
print(solution())
이 방법에는 문제가 있다.
00009-00009와 같이 0으로 시작하는 숫자가 입력되었을 때, eval 함수가 처리하지 못한다.
어떻게 하면 좋을지 몹시 고민하다가... 아래와 같이 해결했다.
def solution():
inp = str(input())
number = inp.replace('+', '.').replace('-', '.')
number = number.split('.')
numbers = []
for i in range(len(number)):
numbers.append(int(number[i]))
inp_s = list(inp)
sign = [1]
for i in range(len(inp_s)):
if (inp_s[i] == '-'):
sign.append(0)
elif(inp_s[i]=='+'):
sign.append(1)
temp = ''
for i in range(len(numbers)):
if (sign[i]==0):
temp = temp + '-'
else:
temp = temp + '+'
temp = temp + str(numbers[i])
temp = temp.split('-')
answer = 0
for i in range(len(temp)):
if i == 0:
answer += eval(temp[i])
else:
answer -= eval(temp[i])
return answer
print(solution())
너무나도 복잡하고 이상하게 풀고 있다고 생각하면서도... 일단 풀겠다는 마음으로...
생각하고 쓴 게 아니라 일단 쓰고 덕지덕지 붙여가며 쓴 코드라 복잡하고 이상하다.
어떤 코드가 왜 들어갔는지 나도 정확히 이해를 못하고 있어서, 벨로그 쓰면서 뺴도 될 것 같은 부분 뺐다가 오류 나고 다시 넣고 이유 쓰고... 했다.
그래도 얻어가는 것: eval을 써봤다.
분명 더 현명한 풀이가 있을 것이다. 찾아보자...