
그리디 관점으로 생각해보면 쉽게 풀리는 문제이다. 최솟값을 만들기 위해 "-"를 기준으로 문자열을 구분한 다음 가장 첫번째에 등장하는 수만 더하고, 이후에는 모두 빼주면 된다.
예제 입력을 기준으로 설명하면 다음과 같다.
(55) - (50 + 40) = -35
자바에서는 문자열을 구분하기 위해 split()와 StringTokenizer 클래스가 있다.
여기서는 split 메서드를 사용하여 아래와 같이 구분하도록 하겠다.
String input = br.readLine();
String[] str = input.split("-");
"-"를 기준으로 나눠진 str에 대해 내부에 있는 덧셈 연산을 모두 진행한 후 아래와 같이 가장 첫번째 등장하는 수는 더하고, 이후에는 모두 빼주면 된다.
int answer = 0;
for (int i = 0; i < str.length; i++) {
int temp = mySum(str[i]);
if (i == 0)
answer += temp;
else
answer -= temp;
}
따라서 전체 소스코드는 다음과 같다.
import java.io.*;
public class P_1541 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String[] str = input.split("-");
int answer = 0;
for (int i = 0; i < str.length; i++) {
int temp = mySum(str[i]);
if (i == 0)
answer += temp;
else
answer -= temp;
}
System.out.println(answer);
}
static int mySum(String str) {
int sum = 0;
String[] temp = str.split("\\+");
for (int i = 0; i < temp.length; i++) {
sum += Integer.parseInt(temp[i]);
}
return sum;
}
}