반응형
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력55-50+40 |
예제 출력-35 |
풀이
주어진 식에 괄호를 넣어 최솟값을 만드는 문제이다.
괄호를 어디에 넣어야 할지부터 생각해 보자.
식에 쓰이는 연산이 오직 +, - 뿐이므로
당연 서로 더하는 것에만 괄호를 넣으면 모두 빼는 값이 될 것이다.
이 말인 즉, 처음 숫자만 더하고 나머지 뒤에 오는 숫자는 모두 빼면 된다는 말이다.
이를 바탕으로 eval을 이용하여 코드를 짰다.
a = list(input().split("-"))
for i in range(len(a)):
a[i] = eval(a[i])
result = a[0]*2
for i in a:
result -= i
print(result)
예제의 입력은 답이 잘 나왔으나, syntax error가 발생한다.
수는 0으로 시작할 수 있다는 조건 때문에
eval에 002 와 같은 값이 들어갈 경우 에러가 발생하는 것이었다.
따라서 int() 를 이용하여 형변환을 해 줄 필요가 있다.
여기서 첫 번째 수 이후 - 가 나올 때 까지 앞에 수들은 분리하지 않고 모두 더해줘야 한다는 것만 염두하자.
a = input().split("-")
result = 0
for i in a[0].split("+"):
result += int(i)
for i in range(1,len(a)):
for j in a[i].split("+"):
result -= int(j)
print(result)
반응형
'알고리즘 연습 > 그리디 알고리즘' 카테고리의 다른 글
[🥉2 / 백준 5585 / 파이썬] 거스름돈 (0) | 2021.08.19 |
---|---|
[🥈4 / 백준 13305 / 파이썬] 주유소 (0) | 2021.06.21 |
[🥈3 / 백준 11399 / 파이썬] ATM (0) | 2021.06.20 |
[🥈2 / 백준 1931 / 파이썬] 회의실 배정 (0) | 2021.06.20 |
[🥈2 / 백준 11047 / 파이썬] 동전 0 (0) | 2021.06.20 |