문제
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
풀이
제일 작은 수가 되려면
-가 나오고 뒤에 +들이 나오면 -(a + b + c + d +...)만 고려하면 된다.
처음에 나는 split이 생각나지않아, 결과 스택과 버퍼 스택을 만들어서, -가 나온다음 뒤에 +들이 나오면 버퍼 스택에 다 넣고 다시 - 가나오면 버퍼스택의 값들 다 더해서 - 붙인 값을 결과 스택에 넣고.. 이런 복잡한 방법으로 풀려 노력했다.
그냥 문자열 split을 이용하면 너무 쉽게 풀리는 문제이다.
- "-" 기준으로 split
- 다시 "+" 기준으로 split
참고로 자바에서 split.("+")는 Dangling metacharacter라고 컴파일 에러가 뜬다. split.("\\+"); 를 이용하면 됨
하며 풀면된다.
+기준으로 스플릿된 배열의 값을 모두 더한값에 -1을 곱해가며 결과에 해당 값을 더해가면 된다.
코드
package restudy_1.algostudy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main1541 {
static String expression;
static List<Integer> result = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
expression = br.readLine();
String[] subExpression = expression.split("-");
for(String str : subExpression){
String[] plusExpression = str.split("\\+");
int sum = Arrays.stream(plusExpression).mapToInt(Integer::parseInt).sum();
result.add(sum);
}
if(result.size() > 1){
int sum = 0;
sum += result.get(0);
for(int i = 1; i < result.size(); i++){
sum -= result.get(i);
}
System.out.println(sum);
}else{
System.out.println(result.get(0));
}
}
}
'algorithm' 카테고리의 다른 글
백준 10971(JAVA) (0) | 2021.10.11 |
---|---|
백준 15649(JAVA) (0) | 2021.10.04 |
백준 11052(JAVA) (0) | 2021.09.27 |
백준 2156(JAVA) (0) | 2021.09.09 |
백준 1932(JAVA) (0) | 2021.09.07 |