[標準アルゴリズム]1541号:失われたかっこ


質問する
ポテンシャル俊は正数と+,−と括弧で式を構成した.そして勢俊はかっこを全部削除した.
そして勢俊適はかっこをつけて、この式の値を最小限に抑えようとした.
この式の値を最小にするプログラムを適切なかっこで書いてください.
入力
最初の行には数式があります.式は「0」~「9」、「+」、「-」で構成され、最初の文字と最後の文字は数値です.また、2つ以上の演算子が連続して現れず、5桁よりずっと連続した数値はありません.数はゼロから始まることができます.入力式の長さは50以下です.
しゅつりょく
1行目に正解を出力します.
コード#コード#
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_1541 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String expression = br.readLine();
        String[] str = expression.split("\\-");

        int answer = 0;
        for (int i = 0; i < str.length; i++) {
            String[] subStr = str[i].split("\\+");
            int subSum = 0;
            for (int j = 0; j < subStr.length; j++) {
                subSum += Integer.parseInt(subStr[j]);
            }
            if (i == 0) answer = subSum;
            else answer -= subSum;
        }
        System.out.println(answer);
    }
}
答えと感じ
最小値を求める必要があるため、入力した式を「-」として分離します.このときsplit()法を用いて式を分離した.
splitは正規表現を受け入れるため、「-」を入力するとregexが返されます.PatternSyntax Exceptionを吐き出す「-」文字はメタ文字だからです.そのため、ターンテーブル処理を行い、意図的に分離式を行う.スラッシュ自体も単独で出力できないため、スラッシュもエスケープ処理されている.
「-」を基準とした式、「+」を基準とした式をすべて加算します.
それぞれ値上げを差し引く.ここで、答えが0の場合、最初の分離値に加算された値を正しい値に初期化し、次の追加値を削除することができます.
参考資料