Algorithm/문제풀이

[그리디 알고리즘] 잃어버린 괄호

lee308812 2019. 11. 9. 07:31

예제 입력 1

55-50+40

예제 출력 1

-35

 

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

- (-) 부호가 등장하는 시점부터 괄호로 묶으면 뒤에 나오는 것들은 모두 마이너스로 계산하여 더하면 된다.

10+20-(30+55-50+40+30)-(40)

#include <stdio.h>

char input[51];

int main(void)
{
	scanf("%s", input);
	
	int idx = 0;
	int current = 0;

	long long ans = 0;
	bool minus = false;

	while (input[idx] != '\0')
	{
		if (input[idx] == '+' || input[idx] == '-')
		{
			if (minus) ans -= current;
			else ans += current;

			current = 0;

			if (input[idx] == '-') minus = true;
		}
		else
		{
			current = ((current * 10) + (input[idx] - '0'));
		}

		idx++;
	}

	if (minus) ans -= current;
	else ans += current;

	printf("%lld\n", ans);

	return 0;
}