컴굥일지

[BOJ/백준 1541][C++] 잃어버린 괄호 본문

알고리즘/코테 문제

[BOJ/백준 1541][C++] 잃어버린 괄호

gyong 2022. 4. 23. 03:37
반응형

문제

https://www.acmicpc.net/problem/1541

백준 1541

 

문제 내용

입력받은 식에 괄호를 적절히 쳐서, 식의 값을 최소로 만들면 된다.

식에는 0~9까지의 숫자, +, - 만이 올 수 있고, 시작과 끝은 반드시 숫자이다.

 

문제 풀이

식의 값을 최소로 만드는 것이 핵심이다.

그렇기 때문에 - 가 입력되면 그 뒤를 모두 뺄셈 처리하면 된다.

 

ex-1) 55 - 50 + 45 => 55 - ( 50 + 45 ) = - 40

ex-2) 55 - 50 + 45 - 30 + 20 => 55 - ( 50 + 45 ) - ( 30 + 20 ) = -90

ex-2에서 알 수 있다시피, 처음으로 나오는 - 뒤의 숫자를 전부 빼주면 된다.

 

코드

#include <iostream>
#include <string>
using namespace std;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	//입력
	string str;
	getline(cin, str);

	//문제 해결
	int result = 0;
	string tmp = "";
	bool minus = false;

	for (int i = 0; i <= str.length(); i++) {
		if (str[i] == '+' || str[i] == '-' || i == str.length()) { //부호를 입력 받았을 때
			if (minus) {//음수일때
				result -= stoi(tmp);
				tmp = ""; //임시 문자열 초기화
			}
			else {
				result += stoi(tmp);
				tmp = ""; //임시 문자열 초기화
			}
		}
		else {
			tmp += str[i];
		}

		//부호가 마이너스일때.
		if (str[i] == '-') {
			minus = true;
		}
	}

	//결과 해결
	cout << result << '\n';
}
반응형
Comments