문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.
출력
첫째 줄에 정답을 출력한다.
풀이
정답을 유추해보면 문자열에서 -가 있을 시 -이후의 숫자를 더한 값들을 묶어주어서 -값을 크게 만들어주는 편이 최솟값이 될 것이다. -괄호안에 최대한 많은 +로 숫자를 묶어주면 된다.
예를들어 위의 예를 보면 55-(50+40)이 최솟값일 것이다. 일단 arr을 -로 split해서 배열에 담아준뒤 첫번째 배열이후 값들을 모두 -해주면 정답이 반환될 것이다. 배열안에 +로 숫자가 연결되어 있기 때문에 이를 다시 add메소드에서 +로 스플릿해줘서 배열에 담아서 합을 구하고 main메소드에서 처음 arr[0]은 -가 아니라 그대로 result에 담고 이후의 값부터 -로 빼주면서 결과 값을 구한다 ㅇㅅㅇ.
ps) split해줄때 + , -앞에 \\를 해주는 이유는 정규표현식에서 사용되는 문자들이기 때문에 문자 그자체를 의미하는 \\를 붙여줘야 제대로 인식하고 작동한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc=new Scanner(System.in);
String input =sc.nextLine();
String [] arr = input.split("\\-");
int result=add(arr[0]);
for(int i=1;i<arr.length;i++) {
result-=add(arr[i]);
}
System.out.println(result);
}
public static int add(String i) {
String []arr = i.split("\\+");
int result=0;
for(String k : arr) {
result+=Integer.parseInt(k);
}
return result;
}
}
|
https://www.acmicpc.net/problem/1541
'Algorithms > BOJ[Java]' 카테고리의 다른 글
[백준/10825번] 국영수 [Java] (0) | 2020.03.12 |
---|---|
[백준/1931번] 회의실 배정 [Java] (0) | 2020.03.12 |
[백준/1181번] 단어 정렬[Java] (0) | 2020.03.12 |
[백준/10814번] 나이순정렬 [Java] (0) | 2020.03.12 |
[백준/1735번] 분수 합 (유클리드 호제법 응용)[Java] (4) | 2020.03.11 |