백준 1541. 잃어버린 괄호

WooHyeong·2024년 1월 3일
0

Algorithm

목록 보기
35/41

백준 1541. 잃어버린 괄호

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 정답을 출력한다.

풀이

우선 고민할 것은 숫자와 기호가 섞인 문자열 입력을 어떻게 처리할 것인가이고 그 다음으로는 어떻게 풀이할 것인가

식의 값이 최소가 되기 위해서는 큰 수로 뺄셈을 해야한다.

1 + 2 - 3 + 4 = 4 이지만
1 + 2 - (3 + 4) = -4 가 된다.

큰 수로 뺄셈을 하기 위해서는 빼기 부호 뒤에 입력되는 값들이 빼기 부호를 다시 만날 때까지 더해주면 큰 수가 된다.

위 풀이를 하기 위해 우선 입력된 값을 '-' 로 split() 한다.

String[] arr = ["1+2", "3+4"]];
split된 문자열의 값을 구한다.
값을 구하기 위해 arr의 값을 다시 "+"로 split() 하고 합을 구한다.

합하여 구한 값들을 빼서 최소값을 만들 수 있다.

풀이 코드 java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;

public class boj1541 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();

        /* input을 어떻게 처리할 것인가. 정규표현식을 parsing 하려했으나
        정규표현식 Pattern.matches(REGEXP_CHAR_NUM, input)의 결과값이 boolean 타입
         solution -> - 를 만날 때까지 쭉 더한다
         기호와 숫자 배열을 따로?
         - 로 split을 진행하여 다 더 하고, 더한 것들을 순차적으로 뺀다.
         1. - 로 스플릿
         2. + 로 스플릿 하여 모두 더하기
         3. 2에서 나온 값들을 빼기
         */

        String[] first = input.split("-");
        Deque<Integer> values = new ArrayDeque<>();
        for (String s : first) {
            String[] second = s.split("[+]");
            int temp = 0;
            for (String s1 : second) {
                temp += Integer.parseInt(s1);
            }
            values.add(temp);
        }

        int result = values.removeFirst();

        while (!values.isEmpty()) {
            result -= values.removeFirst();
        }

        System.out.println(result);
    }
}
profile
화이링~!

0개의 댓글