BOJ 1541 잃어버린 괄호

문제출저

+, -, 0~9로 이루어진 숫자로 형성된 식이 주어질때 적절히 괄호를 쳐서 값을 최소로 만들기


풀이

-연산자가 식에 존재한다면 -연산자 뒤에 나오는 숫자들은 모두 괄호로 묶어줘서 뺄셈으로 적용시킬 수 있다.
-연산자가 나오는 위치값을 기준으로 식을 계산해주었다.
String.indexOf(ch)를 이용해서 -연산자의 위치를 찾아낸 다음 그 다음부터는 마이너스의 위치가 숫자의 위치보다 앞서 있으면 해당 숫자를 빼주고, 그렇지 않으면 더해주었다.
이때, -연산자의 위치는 가장 최소값으로 설정해준다.
예를 들어 10+20-30+40-50 의 경우 -연산자의 위치인덱스중 최소값은 20다음의 5가 된다.

  • 혹은 -연산자가 아닐 경우에는 숫자로 처리하고 연산자가 나올경우 지금까지 만들어진 숫자를 처리하고 숫자값을 0으로 세팅해준다.
    주의할 점은 -연산자가 아예 나오지 않을 경우에 대한 처리가 필요하다. (indexOf(ch) = -1인 경우)

소스코드

String input = br.readLine();

int n = input.length();
int minusPos = input.indexOf('-');
int ans = 0;
int num = 0;
for (int i = 0; i < n; i++) {
	if (input.charAt(i) != '+' && input.charAt(i) != '-') {
		num *= 10;
		num += (input.charAt(i) - '0');

	 else {
		if (minusPos > 0 && minusPos < i) {
			ans -= num;
		else {
			ans += num;
		}
		num = 0;
	}
}

if (minusPos > 0 && minusPos < n - 1) {
	ans -= num;
 else {
	ans += num;
}