algorithm

백준 1541(JAVA)

yjs3819 2021. 9. 30. 20:46
728x90

문제

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

풀이

제일 작은 수가 되려면
-가 나오고 뒤에 +들이 나오면 -(a + b + c + d +...)만 고려하면 된다.

처음에 나는 split이 생각나지않아, 결과 스택과 버퍼 스택을 만들어서, -가 나온다음 뒤에 +들이 나오면 버퍼 스택에 다 넣고 다시 - 가나오면 버퍼스택의 값들 다 더해서 - 붙인 값을 결과 스택에 넣고.. 이런 복잡한 방법으로 풀려 노력했다.

그냥 문자열 split을 이용하면 너무 쉽게 풀리는 문제이다.

  1. "-" 기준으로 split
  2. 다시 "+" 기준으로 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));
        }
    }
}
728x90

'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