반응형
문제: https://www.acmicpc.net/problem/1541
문제 설명
더보기
문제
세준이는 양수와 +, -, 그러고 괄호를 가지고 식을 만들었다. 그러고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘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() 함수가 아닌 '-'와 '+'를 기준으로 문자열을 나눠서 연산하는 방식으로 변경했습니다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준 1920번 - 수 찾기 / Python (0) | 2021.09.17 |
---|---|
백준 1931번 - 회의실 배정 / Python (0) | 2021.09.16 |
백준 5585번 - 거스름돈 / Python (0) | 2021.09.16 |
백준 10866번 - 덱 / Python (0) | 2021.09.16 |
백준 2309번 - 일곱 난쟁이 (0) | 2021.09.16 |