끄적끄적 코딩
article thumbnail
728x90

괄호를 적절히 쳐서 최소값을 만드는 문제입니다.

연산자는 같은것이 연속해서 나올 수 없기 때문에
+가 나온 후에는 -가 나올 수 밖에 없고,
-가 나온 후에는 +가 나올 수 밖에 없습니다.

-가 후에 나온 +는 괄호를 통해서 묶을 수 있습니다.
ex 100 + 20 - (30 + 60) - (20 + 40)
그러므로 처음 나온 연산자가 -면 전부 -처리해주면 되고,
+면 한번 +연산해주고, 그다음 부터는 모든 값들을 - 연산해주면 됩니다.

 

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

int num = 0;
int m = 0;
string tmp = "";
string s;

void solve(void)
{
	for (int i = 0; i <= s.size(); ++i){
		if (s[i] == '+' || s[i] == '-' || s[i] == '\0'){
			if (m) {
				num -= stoi(tmp);
			}
			else {
				num += stoi(tmp);
			}

			if (s[i] == '-') {
				m = 1;
			}

			tmp = "";
			continue;
		}

		tmp += s[i];
	}
}

int main(int argc, char *argv[])
{
	cin >> s;

	solve();

	cout << num << endl;
	
	return 0;
}

'알고리즘' 카테고리의 다른 글

[C++] 백준 1037번 약수  (0) 2019.09.02
[C++] 백준 5086번 배수와 약수  (0) 2019.09.02
[C++] 백준 1436번 영화감독 숌  (0) 2019.09.02
[C++] 백준 1018번 체스판 다시 칠하기  (0) 2019.09.02
[C++] 백준 7568번 덩치  (0) 2019.09.02

검색 태그