실버 2단계 문제였다.
구분자 "+"와 "-"를 경계로 계산하기 위해선 split()
혹은 StringTokenizer
를 사용해야 한다.
평소 문제를 풀 때 BufferedReader
를 사용해 문자열을 읽고, 이를 StringTokenizer
로 숫자 혹은 문자 등을 추출했기 때문에 split()
대신 StringTokenizer
을 사용하였다.
여기서 문제를 풀 때 주의해야 할 점은 "+"와 "-"는 서로 다른 구분자이기 때문에 별도로 객체를 정의하여 사용하였다. 만약 구분자가 없어도 하나의 토큰으로 간주된다.
반환값인 sum을 초기값으로 Integer.MAX_VALUE로 하여 이후에 대입되어야 할 조건과 구분지었다.
그리디
문자열
파싱
import java.io.*;
import java.util.*;
public class Main{
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st1 = new StringTokenizer(br.readLine(), "-"); //구분자 "-"가 포함되지 않아도 하나의 토큰으로 간주됨
int sum = Integer.MAX_VALUE;
while (st1.hasMoreTokens()) { //따라서 "-"가 포함되지 않아도 하나의 토큰이므로 while문 실행
int tmp = 0;
StringTokenizer st2 = new StringTokenizer(st1.nextToken(), "+");
while (st2.hasMoreTokens()) {
tmp += Integer.parseInt(st2.nextToken());
}
if (sum == Integer.MAX_VALUE) {
sum = tmp;
} else {
sum -= tmp;
}
}
System.out.println(sum);
}
}