
https://www.acmicpc.net/problem/1541
import java.util.*;
import java.io.*;
//55-50+40
//55-(50+40) -> -35가 답
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String[] nums = input.split("[+,-]");
String[] opers = input.replaceAll("[0-9]", "").split("");
String prev = opers[0];
for (int i = 1; i < opers.length; i++) {
if (prev.equals("-")) {
opers[i] = "-";
}
prev = opers[i];
}
int ret = Integer.parseInt(nums[0]);
for (int i = 1; i < nums.length; i++) {
String op = opers[i - 1];
if (op.equals("-")) {
ret -= Integer.parseInt(nums[i]);
} else {
ret += Integer.parseInt(nums[i]);
}
}
System.out.println(ret);
}
}
+, -로 이루어진 수식에서 괄호를 적당히 쳐서 연산결과가 최소값이 되도록 하는 문제이다.+, -밖에 없다는 것이다. +는 -, -는 +가 된다.-뒤에 있는 값을 최대한 크게, +를 -로 변경하면 된다.nums, 기호만 파싱한 opers를 준비한다.opers에서 -이후의 +문자를 모두 -로 변경한다. 이때 prev가 +가 되면 아무것도 하지 않고 건너뛴다.nums와 opers를 순회하며 +면 더하고, -면 빼는 과정을 수행하면 된다. -뒤의 +를 -로 변경해준다고 생각하면 이해가 쉽다.opers를 구성할 때 .split("[\\d]로 숫자만 빼서 파싱하려 했는데 공백이 계속 추가됐다..replaceAll("[0-9]", "")로 변경하는 방법을 구글링으로 찾아냈다.