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]", "")
로 변경하는 방법을 구글링으로 찾아냈다.