ALGORITHM

[JAVA] 백준 1541- 잃어버린 괄호

연듀 2023. 1. 21. 09:53

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] str = br.readLine().split("");

        int answer = 0;
        boolean prevIsMinus = false;
        String num = "";

        for(int i=0; i<=str.length; i++){
            if(i==str.length || str[i].equals("-") || str[i].equals("+")){ // 연산자라면
                if(!prevIsMinus){ // -가 나온적이 없다면
                    answer += Integer.parseInt(num);
                    num = "";
                }
                else{ // - 가 나온적이 있다면 그 다음도 -로 계산
                    answer -= Integer.parseInt(num);
                    num = "";
                }
                if(i!=str.length && str[i].equals("-")) prevIsMinus = true;
            }
            else{ // 연산자가 아니라 문자라면
                num += str[i];
            }
        }
        System.out.println(answer);
    }
}

 

 

예제 입력1을 보면, 55-50+40 에서 괄호를 55-(50+40) 으로 하면 답이 -35가 되어 최소가 된다.

마이너스가 나오는 순간 괄호를 넣어 그 뒤에 +를 모두 -로 바꿔야 최소를 구할 수 있다.