[1541] 잃어버린 괄호
| Algorithms / 백준 문제 풀이 모음 # Python, Sliver 2
백준 문제 풀이
level: Sliver 2
문제 링크
해설
+,-가 있는 식에서 괄호를 쳐서 값을 최소로 만드는 문제이다...! 사실 최소로 만든다는 것에 초점을 주면 -가 붙은 값을 크게 만들면 된다. 포인트는 괄호를 치면 분배 법칙에 의해서 +를 -로 바꿀 수 있다는 점이다. 따라서 - 와 - 사이에 것들을 괄호치면 된다. 이를 이용하면... 1. +를 ' '로 대체하고, -를 ' -'로 대체한다. (공백이 무조건 있어야 한다.) 2. 공백이 있다면 split을 이용할 수 있기 때문에 이를 리스트로 넣을 수 있다. 3. list로 하나씩 살펴가면서 음수일 때 플래그를 활성화 시키고, 이후 나오는 양수는 -로 치환한다. (플래그를 negative로 정의함) 4. 만약 음수 플래그에 음수라면 그대로 + 시킨다. 이러면 -와 -사이의 값을 괄호친 것과 동일하다.답안
import sys if __name__ == '__main__': strings = sys.stdin.readline() nums = [] strings = strings.replace('+', ' ').replace('-', ' -') nums = list(strings.split()) sum = 0 negative = 0 for i in nums: num = int(i) if num < 0: negative = 1 sum += num else: if negative == 1: sum -= num else: sum += num print(sum)