baekjoon/Greedy

백준 1541번 : 잃어버린 괄호 자바

Meluu_ 2024. 8. 26. 15:13

 

🧫 문제 분석

 

✔️ 출처

잃어버린 괄호 실버 2

 

📖 문제

 

이 문제같은 경우

첫번째 수를 저장한 뒤 +가 나오면 더해준다. 

그런데 한 번이라도 -가 나오면 그 뒤에 아무리 많은 +가 나와도 

처음 나온 - 때문에 이들은 전부 합한 후 -로 빼게 된다. 

따라서 한 번이라도 - 가 나오면 저장 한 수에 계속해서 -로 빼주면 된다. 

 

예를 들어 아래의 입력이 주어진다고 하자

1+2-4-5+2+3

처음 1 +2까지는 더하고 

-가 나왔으므로 괄호를 쳐서 최솟값을 만들어야 하기에 

- 뒤에 나오는 +로 더해지는 모든 수들을 빼주면 된다.

(1 + 2) - 4 - 5 - 2 - 3 = -11

(1+2)  -4 - (5 + 2 + 3) =   -11

 

 


🔅 문제 풀이

import java.io.*;

public class Main {

    static int[] dp;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String expression = br.readLine();
        String exp = expression.replaceAll("[0-9]", "");
        int[] num = new int[exp.length() + 1];
        int idx = 0;

        for (String n : expression.split("[-+]")) {
            num[idx++] = Integer.parseInt(n);
        }

        int sum = num[0], tmp = 0;
        boolean minus = false;

        for (int i = 1; i < num.length; i++) {
            if (exp.charAt(i - 1) == '-' ) {
                minus = true;
            }

            if (minus) {
                sum -= num[i];
            } else {
                sum += num[i];
            }
        }

        bw.write(sum +"");
        bw.flush();
        bw.close();
    }
}

 

 

 

❗ 오답노트 / 필요한 지식

  1.  예전에 풀고 꽤지나서 다시 풀어본 문제인데 예전에는 stack이나 list로 시도했던 흔적이 보인다. 
  2. 수학 문제는 잘 생각하면 간단한 방법이 무조건 나온다.