1541번 - 잃어버린 괄호

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

첫째 줄에 식이 주어진다. 식은 ‘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번 - 토마토  (0) 2023.07.10
14940번 - 쉬운 최단거리  (2) 2023.07.07