문제를 어떻게 접근해야할지 고민을 좀 했다.
괄호( "(" )를 한 곳에 두고 그리디 방식으로 괄호 ( ")" )를 배치해서 그 값을 모두 비교해야하나? 생각이 들었다.
하지만 우리는 계산 결과의 최소값을 구하고 싶은 것이니까,
어쨋든 -가 나오면 그 바로 뒤의 +는 모두 -로 바꿔주면 되는 것이다.
그리고나서 그 값들을 모두 더하기 연산으로 더해주면 최소값이 된다.
package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ1541 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String l = br.readLine();
int[] nums = new int[50];
int pm = 1;
int cur = 0;
int cnt = 0;
for(int i = 0; i < l.length(); i++){
// numeric? make number
if(0 <= l.charAt(i)-'0' && l.charAt(i)-'0' <= 9){
cur = cur * 10 + l.charAt(i)-'0';
if(i == l.length()-1) nums[cnt] = cur * pm;
}
else{
// save number
nums[cnt] = cur * pm;
cur = 0;
cnt++;
pm = l.charAt(i) == '-' ? -1 : 1;
}
}
// - 바로 뒤에 +가 있다면 그 수는 -로 바꾸기
for(int i = 1; i < nums.length; i++){
if(nums[i-1] < 0 && nums[i] > 0){
nums[i] *= -1;
}
}
int answer = 0;
for(int i: nums){
answer += i;
}
System.out.println(answer);
}
}