[코딩테스트]BJ1541 잃어버린 괄호 - C++

Coffee Time☕·2020년 11월 21일
0

코딩테스트

목록 보기
16/42

[문제]

세준이는 양수와 +,-, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다.그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

[입력]

첫째 줄에 식이 주어진다. 식은 '0'~'9','+', 그리고 '-' 만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.

[출력]

첫째 줄에 정답을 출력한다. .

[예제 입력1]

55-50+40

[예제 출력1]

-35

[문제 풀이]

계산값이 최소가 되도록 괄호를 묶는 문제이다.
연산기호는 -와 + 밖에 없다. 계산한 결과값에 -값을 붙이면 가장 최소의 값을 얻을 수 있다. 가령 예제 입력에서는 55-(50+40) 와 같이 묶어준다.

코드에서는 연산자인 경우와 피연산자인 경우를 나누어 주었으며, 이전 연산자가 -인지의 여부에 따라 결과값을 음수로 바꿔주었다.

[코드]

#include<iostream>
#include<string>

using namespace std;

int main() {

	string equation;
	cin >> equation;
	int result=0;
	string temp;
	bool isMinus = false; 

	for (int i = 0; i <= equation.size(); i++) {
		//연산자 일 경우 
		if (equation[i] == '+' || equation[i] == '-' || equation[i] == '\0') {
			if (isMinus) //숫자 앞에 -가 있었다면
				result -= stoi(temp); //결과 값에 - 를 붙여준다.
			else
				result += stoi(temp); 
			
			if (equation[i] == '-')
				isMinus = true;
			temp = ' ';
		}
		else //피연산자인 경우
			temp += equation[i];
	}

	cout << result; 
	return 0;
}

0개의 댓글

관련 채용 정보