baekjoon/Greedy
백준 1541번 : 잃어버린 괄호 자바
Meluu_
2024. 8. 26. 15:13
🧫 문제 분석
✔️ 출처
📖 문제

이 문제같은 경우
첫번째 수를 저장한 뒤 +가 나오면 더해준다.
그런데 한 번이라도 -가 나오면 그 뒤에 아무리 많은 +가 나와도
처음 나온 - 때문에 이들은 전부 합한 후 -로 빼게 된다.
따라서 한 번이라도 - 가 나오면 저장 한 수에 계속해서 -로 빼주면 된다.
예를 들어 아래의 입력이 주어진다고 하자
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();
}
}
❗ 오답노트 / 필요한 지식
- 예전에 풀고 꽤지나서 다시 풀어본 문제인데 예전에는 stack이나 list로 시도했던 흔적이 보인다.
- 수학 문제는 잘 생각하면 간단한 방법이 무조건 나온다.