세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
첫째 줄에 정답을 출력한다.
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string.h>
using namespace std;
// + : 43
// - : 45
// 0 : 48
int main(void) {
cin.tie(NULL); ios::sync_with_stdio(false);
string input;
cin >> input;
int start = 0; //string 복사 시작 위치. (input->origin)으로 복사
int len = 0; //복사 길이
string origin; //숫자부분 저장 (string->char) 형 변환
char dest[5]; //숫자부분 저장 (string->char) 형 변환
int number; //숫자 저장 (char->int)형 변환
int sum = 0; //결과값
bool plus = true; //minus연산자를 만나면 false
int l = input.length();
for (int i = 0; i < l; i++) {
if (input[i] < 48){
origin = input.substr(start, len); //start부터 len개만큼 잘라서 origin에 넣는다
strcpy(dest, origin.c_str()); //strcpy는 char <- char이다. string.c_str()로 char형 변환
number = atoi(dest); //char->int형변환
start += len + 1;
len = 0;
if (plus) {
sum += number;
}
else {
sum -= number;
}
if (input[i] == 45) {
plus = false;
}
}
else {
len++;
}
}
origin = input.substr(start, len);
strcpy(dest, origin.c_str());
number = atoi(dest);
if (plus) {
sum += number;
}else{
sum -= number;
}
cout<< sum;
return 0;
}
string을 공부했다는 것에 의미를 두겠다. 다시 풀어보도록 하자