-
*[백준][1541] 잃어버린 괄호Algorithm/백준 2021. 4. 14. 00:15
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
풀이과정
마이너스 연산을 가장 나중에 하도록 한다면 최솟값을 구 할 수 있다.
연산자가 나올때 까지 임시 String에 숫자를 저장 한 뒤 해당 연산에 맞는 처리를 해주면 된다.
+연산자의 경우 임시 result 변수에 누적값을 더 해주었다.
-연산자의 경우 현재 까지 누적해서 더해 온 result값을 vector에 저장 한 후 문자열이 모두 검토 된 후 마지막에 모두 마이너스 처리를 하도록 구현하였다.
소스코드
더보기#include <stdio.h> #include <string> #include <iostream> #include <vector> using namespace std; int main() { string str; string tempStr = ""; vector<int> v; int result = 0; cin >> str; for (int i = 0; i < str.length(); i++) { if (str[i] == '-') { result += stoi(tempStr); v.push_back(result); tempStr = ""; result = 0; } else if (str[i] == '+') { result += stoi(tempStr); tempStr = ""; } else { tempStr += str[i]; if (str.length() - 1 == i) { result += stoi(tempStr); v.push_back(result); } } } int answer = v[0]; for (int i = 1; i < v.size(); i++) { answer -= v[i]; } printf("%d\n", answer); }
결과
'Algorithm > 백준' 카테고리의 다른 글
*[백준][1946] 신입 사원 (0) 2021.04.15 *[백준][2217] 로프 (0) 2021.04.14 *[백준][1931] 회의실 배정 (0) 2021.04.13 *[백준][11047] 동전 0 (0) 2021.04.13 *[백준][11399] ATM (0) 2021.04.12