[C++] BAEKJOON 1541

HYOoMi·2021년 3월 28일
0

BOJ (Baekjoon Online Judge)

목록 보기
24/29

잃어버린 괄호

문제

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

입력

첫째 줄에 식이 주어진다. 식은 ‘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을 공부했다는 것에 의미를 두겠다. 다시 풀어보도록 하자

참고

+> https://sihyungyou.github.io/baekjoon-1541/

0개의 댓글