
문제 분석
-가 나오기 전까지는 계속 더 해준다.
-가 나오게 되면 지금까지 나온수까지만 더 해주고 그 이후로는 전부다 빼준다.
마지막 숫자는 그전에 -가 한번이라도 나왔으면 빼주고 그렇지 않다면 더해준다.
-유무에 따라 빼주는건 10+20+30-10-20-30+10 이 있다고 했을 때 한번이라도 -가 나온다면 그 뒤는 전부 -가 된다는 것을 알 수 있다 ( -뒤로 나오는+는 더해준다음에 빼주면되고 -뒤에 나오는 -는 그대로 빼주면 되니까)
한번이라도 나오는 경우 인 케이스는 boolean을 이용해 체크해줬다.
전체 소스
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int size = str.length();
int p = 0;
String input = "";
boolean check = false;
int sum = 0;
while (p != str.length()) {
char now = str.charAt(p);
if (now == '+' && check == false) {
sum = sum + Integer.parseInt(input);
input ="";
} else if (now == '-' && check == false) {
sum = sum + Integer.parseInt(input);
input ="";
check = true;
} else if (now == '+' && check == true) {
sum = sum - Integer.parseInt(input);
input ="";
} else if (now == '-' && check == true) {
sum = sum - Integer.parseInt(input);
input ="";
}
else {
input = input + now;
}
p++;
}
if(check==false) {
sum = sum + Integer.parseInt(input);
}else if(check==true) {
sum = sum - Integer.parseInt(input);
}
System.out.println(sum);
}
}
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1 복사
55-50+40
예제 출력 1 복사
-35
예제 입력 2 복사
10+20+30+40
예제 출력 2 복사
100
예제 입력 3 복사
00009-00009
예제 출력 3 복사
0
'알고리즘(BOJ) > Silver' 카테고리의 다른 글
백준 - ATM 11399 (0) | 2023.02.11 |
---|---|
백준 - 섬의 개수 4963 (0) | 2023.02.10 |
백준 - 로프 2217 (0) | 2023.02.09 |
백준 - 안전 영역 2468 (0) | 2023.02.09 |
백준 - 동전0 11047 (0) | 2023.02.09 |