-
[그리디] 잃어버린 괄호(15410)(C++)BOJ C++ 알고리즘 공부 2022. 4. 17. 12:22
https://www.acmicpc.net/problem/1541
1. 문제 개요
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
2. 입출력
3. 문제 풀이
식의 값이 최소가 되기 위해서는 빼주는 값이 최대한 많아야 한다.
55-50+40
다음과 같은 식이 있을 때, 50과 40을 괄호로 묶어주면 55-90이 되기 때문에 식이 최소가 될 수 있다.
55-(50+40)
따라서 연산자가 - 인 경우 그 뒤로 + 연산자 뒤의 숫자는 모두 괄호 안에 넣게되면 식의 값을 최소화 할 수 있다.
55-(50+40)-(60+70+80+50)-(30+40+70)
4. 전체 코드
#include <iostream> using namespace std; int main(void) { string equation, tempStr=""; int result = 0; bool isMinus = false; cin >> equation; equation += "#"; // string의 끝을 표시 for(int i=0;i<equation.length();i++) { if(equation[i]=='-'||equation[i]=='+'||equation[i]=='#') { // 문자열의 끝이거나 연산자인 경우 if(isMinus) result -= stoi(tempStr); else { if(equation[i]=='-') isMinus = true; result += stoi(tempStr); } tempStr = ""; } else { // 숫자인 경우 tempStr += equation[i]; } } cout << result; }
'BOJ C++ 알고리즘 공부' 카테고리의 다른 글
[BFS] 벽 부수고 이동하기 (2206)(C++) (0) 2022.05.01 [BFS/DFS] DFS와 BFS(1260)(C++) (0) 2022.04.24 [그리디] 주유소 (13305)(C++) (0) 2022.04.03 [그리디] 도서관 (1461)(C++) (0) 2022.04.03 [수학] 소수(2581), 약수 구하기(2501) (0) 2022.03.27