[백준] 1541번

코린이·2022년 5월 15일
0

백준

목록 보기
28/38

1541번 문제

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

백준 문제 링크

풀이

사용 언어 : python

- 연산이 시작하는 부분부터 다음 -가 나오기 전까지 괄호로 묶어주면 최소값을 구할 수 있다.

  1. -을 기준으로 식을 분리해 준다.
  2. 나누어준 식을 - 연산이 있는 경우와 없는 경우로 나누어 계산한다.
    • - 기호가 없는 경우는 arr의 길이가 1이므로 다 더해주면 최소값이 된다.
    • - 기호가 있는 경우 다 더한 후 -를 붙여 음수로 만들어 준다.
    • 맨 첫번째 arr[0]는 양수가 되어야 하므로 arr[0]가 0보다 작을 경우 -를 붙여 양수로 만들어 준다.

코드

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

for i in range(len(arr)):
    if len(arr) == 1:  # - 연산이 없는 경우 그냥 다 더해주면 된다.
        arr2 = map(int,arr[i].split('+'))
        arr[i] = sum(arr2)
    else: 
        if (len(arr[i].split('+'))>1):
            arr2 = map(int,arr[i].split('+'))
            arr[i] = -sum(arr2)
        else:
            arr[i] = -int(arr[i])
            

if arr[0] < 0: # -가 나오기 전까지의 값은 양수가 되어야하므로 바꿔준다.
    arr[0] = -arr[0]

print(sum(arr))
profile
초보 개발자

0개의 댓글