코딩뚠뚠

[백준문제풀이] 1541 잃어버린 괄호 본문

알고리즘 문제풀이/백준문제풀이

[백준문제풀이] 1541 잃어버린 괄호

로디네로 2020. 12. 31. 00:44
반응형

 

풀이일시 : 2020-09-02

 

문제 :

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

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

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

 

입력:

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

ex)

55-50+40

 

출력:

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

ex)

-35

 

풀이 :

마이너스 뒤부터는 괄호를 연다(마이너스로 더한다) 다시 마이너스가 나오면 그 앞에서 닫아준다.

이 과정에 예외가 없기때문에 그리디 알고리즘으로 분류

 

dbstndi6316.tistory.com/62

 

[기본문제풀이] greedy 알고리즘

풀이 일시 : 2020-08-29 ​ 그리디알고리즘 : 당장 눈앞에의 최적의 상황만 쫓는 알고리즘이다. 대표적인 알고리즘으로는 가장 짧은 간선부터 연결하는 크루스칼 알고리즘이 있다. ​ 문제 : 총 몇

dbstndi6316.tistory.com

 

#include <iostream>
#include <string>

using namespace std;

string a;

int main() {
	cin >> a;
	int result = 0;
	string temp = "";
	bool minus = false;

	for (int i = 0; i <= a.size(); i++) {
		//숫자를 먼저 만들고 그 숫자의 부호를 나중에 만들어서 더하거나 빼준다.
		if (a[i] == '+' || a[i] == '-' || a[i] == '\0') { //부호가있을때만 걸린다.
			if (minus == true) //마이너스가 한번 true로 셋되면 계속 마이너스로 더한다
				result += -stoi(temp); //문자열을 숫자로 변환하는 함수 atoi도 쓸수있음
			else
				result += stoi(temp);
			temp = ""; //temp를 비워준다.
			if (a[i] == '-')
				minus = true;
			continue;
		}
		temp += a[i];
	}
	printf("%d", result);
	return 0;
}
반응형