문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1
55-50+40
예제 출력 1
-35
더 많은 예제는 여기에서 https://www.acmicpc.net/problem/1541
그리디 알고리즘에서의 문제.
그리디란 것에 중점을 둬야한다. 그래야 문제의 접근방식을 찾을 수 있는 것 같다.
+,-의 정수식에 최소값을 구하는 문제...
어떻게 진행해야할까 하다가 '-'로 되어진 정수가 커지면 커질수록 최소값이 된다는 것을 터득했다.
그러면 '-'가 나올 때까지 뒤에 값을 더해주면 되는일...
input()으로 받을 때, split('-')을 해주면 -들은 다 사라지고 정수 또는 정수+정수 식이 남는다.
정수들은 냅두고 정수+정수를 다 더해주고 처음 정수에서 나머지 요소들을 빼주면 해결된다!
진짜 조건만 터득하면 코드를 짜는 것은 쉽다. 조건 터득이 어려운 문제였음....
string=input().split('-')
for i in range(len(string)):
if '+' in string[i]:
string[i]=sum(list(map(int,string[i].split('+'))))
else:
string[i]=int(string[i])
result=string[0]
for i in range(1,len(string)):
result-=string[i]
print(result)
'알고리즘' 카테고리의 다른 글
[백준 2981번] 검문(약수 알고리즘) in python (0) | 2021.11.10 |
---|---|
[백준 2609번] 최대공약수와 최소공배수 in python (0) | 2021.11.10 |
[백준 1931번] 회의실 배정 in python (0) | 2021.11.09 |
[백준 12865번] 평범한 배낭(knapsack) in python (0) | 2021.11.09 |
[백준 9251번] LCS in python (0) | 2021.11.08 |
댓글