알고리즘/백준

백준 1541번 - 잃어버린 괄호 / Python

Hwisaek 2021. 9. 16. 15:57
반응형

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문제 설명

더보기

문제

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

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

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

입력

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

출력

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


 


정답

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

for i in range(len(s)):
    n = map(int, s[i].split('+'))
    s[i] = sum(n)

total = s[0]
for i in range(1, len(s)):
    total -= s[i]
print(total)

 


풀이

 식을 문자열로 입력받아서 괄호를 이용하여 최솟값을 만드는 문제입니다.

 

 연산 결과를 최소로 만들기 위해서는 '+' 연산이 '-' 연산자의 다음 괄호 안에 들어가도록 하면 되는 문제입니다. 식을 그대로 입력받아서 eval() 함수를 이용하면 될 것이라 생각하여 처음에는 eval()로 구현을 시도했습니다.

 

s = list('(' + input() + ')')

idx = 1

while idx < len(s):
    if s[idx] == '-':
        s.insert(idx, ')')
        s.insert(idx + 2, '(')
        idx += 2
    idx += 1

print(eval(''.join(s)))

 

 '-' 의 앞 뒤로 괄호를 넣어서 eval() 함수를 실행했는데, SyntaxError가 발생했습니다. 문제의 다음 조건으로 발생하는 에러입니다.

 

수는 0으로 시작할 수 있다.

 수가 0으로 시작하게 되면 eval() 함수는 에러가 발생하여 eval() 함수가 아닌 '-'와 '+'를 기준으로 문자열을 나눠서 연산하는 방식으로 변경했습니다.

반응형