[python] 잃어버린 괄호 백준 1541

Designated Hitter Jack·2023년 8월 30일

백준 - 파이썬

목록 보기
4/26
post-thumbnail

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.

출력

첫째 줄에 정답을 출력한다.

예제 입력 1

55-50+40

예제 출력 1

-35

예제 입력 2

10+20+30+40

예제 출력 2

100

예제 입력 3

00009-00009

예제 출력 3

0

나의 풀이

#- 연산자 뒤에 +연산자가 오는 경우가 가장 값이 작아지므로 - 연산자 기준으로 계산식을 나눔
#+ 연산자를 기준으로 나뉘는 숫자들을 더한 후, -계산을 수행함 
import sys
input = sys.stdin.readline

minus_split = input().split('-')

plus_list = []

for i in minus_split:
    sum = 0
    temp = i.split('+')
    for j in temp:
        sum += int(j)
    plus_list.append(sum)

n = plus_list[0]
for i in range(1, len(plus_list)):
    n -= plus_list[i]

print(n)

풀이 과정

약간의 수학적 감각이 필요한 문제였다고 생각한다. - 와 + 로 구성된 다항 연산의 값이 최소가 되려면 +로 커진 값 앞에 -가 붙어야 한다. 즉, 다항식 문자열을 -을 기준으로 나눈 후, 나뉜 문자열 내부의 수를 전부 더하고, 더한 값들끼리 뺄셈을 수행하면 값이 최소가 된다는 것이다.

profile
Fear always springs from ignorance.

0개의 댓글