반응형

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문제

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

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

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

입력

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

출력

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


풀이

가장 작은 값을 가지기 위해서는 가장 큰 값을 빼야하기 때문에 +를 묶어서 한번에 -해준다.

정수로 변환하기 위해 try except문을 사용하였다

코드

# 1541 잃어버린 괄호

# '-'를 기준으로 나누어 입력받는다
num = list(map(str,input().split('-')))
# print(num)

# 최종적으로 빼지는 수들이 들어올 리스트
arr = []

for i in range(len(num)):
# 만약 list 안에 수가 정수로 변환이 가능하다면 arr 리스트로 들어오고
# +를 포함한 문자라 변환이 되지 않을 경우 except로 이동한다
    try:
        arr.append(int(num[i]))
    except:
        add_ans = 0
        add = []
        add += num[i].split('+')
# +를 기점으로 수를 더해준다
        for j in add:
            add_ans += int(j)
            # print(j)
# 더해진 수를 arr 리스트로 보낸다
        arr.append(int(add_ans))

# 최종적으로 arr 리스트에 있는 수들을 모두 빼준다.
ans = arr[0]
for i in range(1,len(arr)):
    ans -= arr[i]
print(ans)

 

반응형

'study > 백준' 카테고리의 다른 글

[백준] 1476. 날짜 계산  (0) 2022.06.18
[백준] 10974. 모든 순열 : python  (0) 2022.06.15
[백준] 11399. ATM : python  (0) 2022.06.12
[백준] 17478. 재귀함수가 뭔가요? : python  (0) 2022.06.10
[백준] 9655. 돌 게임 : C++  (0) 2022.03.16

+ Recent posts