문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
풀이 방법
- 0으로 시작하는 숫자가 있으며, ‘-’ 연산자를 만난 후의 모든 숫자를 뺀 값이 최소값이 된다
- 따라서 입력을 문자열로 받아 ‘-’ 연산자 이전의 값을 모두 더하다가 ‘-’ 만난 이후의 모든 숫자를 빼준다
- stoi() - 문자열을 정수로 바꿔주는 함수를 사용해 문자열을 파싱하고 해당 문자열을 다시 숫자로 바꿔주는 작업을 실행한다
- 문자열을 정수로 바꿔주는 방법은 연산자와 입력을 맨 끝을 제외하고 문자열 더하기를 통해 숫자 문자열만 남긴다
- 이후 연산자나 입력의 맨 끝에 도달하면 저장했던 숫자형식의 문자열을 stoi 함수를 통해 정수로 바꿔주며 숫자형식의 문자열을 초기화해준다
코드
#include<iostream>
#include<string>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
string input;
cin >> input;
bool checkMinus = false;
string num;
int result = 0;
for (int i = 0; i <= input.size(); i++) {
if (input[i] == '-' || input[i] == '+' || i == input.size()) {
if (checkMinus) {
result -= stoi(num);
num = "";
}
else {
result += stoi(num);
num = "";
}
}
else {
num += input[i];
}
if (input[i] == '-') checkMinus = true;
}
cout << result;
return 0;
}
'Problem Solving > C++' 카테고리의 다른 글
1389번 - 케빈 베이컨의 6단계 법칙 (0) | 2023.07.23 |
---|---|
21736번 - 헌내기는 친구가 필요해 (0) | 2023.07.22 |
1260번 - DFS와 BFS (0) | 2023.07.17 |
7576번 - 토마토 (1) | 2023.07.10 |
14940번 - 쉬운 최단거리 (2) | 2023.07.07 |