세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
최소로 만들어야 하고 이 문제에서는 +,-의 연산만 사용하므로
-를 기준으로 괄호를 쳐주면 된다고 생각했다.
-안에 -가 있으면 +가 되므로 -부터 또 다른 -가 나오기 전까지만 괄호를 묶어주면 되겠다고 생각했다.
처음엔 입력한 다항식의 항들과 부호를 다 받아야겠다고 생각해서
import re
poly = (sys.stdin.readline().rstrip())
# 100-200+300-500
arr = re.split('([-|+])', poly)
print(arr)
# ['100', '-', '200', '+', '300', '-', '500']
참고한 블로그
이런식으로 하나씩 배열에 나눠서 넣어 if문으로 배열 인덱스를 조정하며 조건을 따졌다. 하다보니 코드도 너무 길어지고 복잡한 것 같아 다른 방식으로 해야겠다고 생각했다.
애초에 받을 때부터 -를 기준으로 나눠서 받고,
맨 처음에 받은 숫자는 무조건 합계에 더해지는 거니까 더해주고 뒤에 받은 나눠진 원소들은 연산을 한 후 합계에서 빼주는 방식으로 코드를 작성했다.
import sys
poly = (sys.stdin.readline().rstrip().split('-'))
total = sum(map(int, poly[0].split("+")))
for i in range(1,len(poly)):
minus = sum(map(int, poly[i].split("+")))
total -= minus
print(total)
map 함수를 완전히 이해하지 못한 채로 사용한 것 같아서
map 함수에 대한 추가적인 공부가 필요할 것 같고,
처음에 사용한 re 라이브러리도 추가적으로 공부해야할 것 같다.