Algorithms
[Python] 백준 1541 잃어버린 괄호
유영서
2023. 12. 5. 15:57
문제
양수와 +, -, 그리고 괄호를 가지고 식을 만든 후, 다시 괄호를 지웠다. 다시 괄호를 쳐서 값을 최소로 만드는 문제이다.
입력
- ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어진 식(처음과 마지막은 숫자)
출력
최솟값
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
★Keypoint : 그리디 알고리즘 , sys
그리디 알고리즘을 사용하면, 각 '+' 연산 이후에 나오는 수는 '-'로 빼주면서 최소값을 만들 수 있다
EX)
입력으로 55 - 50 + 40 가 들어왔을 때 55 - ( 50 + 40 ) 을 해야 최솟값인 -35이 나오는 것이다.
따라서 '-'을 기준으로 수식을 나누는 것은, 각각의 부분 식에서 '+' 연산을 먼저 계산하고 그 이후에 '-'로 빼주는 것이 최소값을 만들기에 적절한 것이다.
<최종 CODE>
expression = input().strip().split('-')
result = sum(map(int, expression[0].split('+')))
for exp in expression[1:]:
result -= sum(map(int, exp.split('+')))
print(result)
- expression = input().strip().split('-'): 입력된 수식을 '-'를 기준으로 나누어 리스트로 만들기
- result = sum(map(int, expression[0].split('+'))): 첫 번째 부분은 '+'로만 구성되어 있으므로 이를 더하기
- for exp in expression[1:]: result -= sum(map(int, exp.split('+'))): 나머지 부분은 '-'가 나오면 그 이후의 모든 값을 빼주는 그리디한 방식으로 계산
- print(result): 최종 결과를 출력