Skip to content

Latest commit

 

History

History
66 lines (40 loc) · 2.17 KB

bj1541.md

File metadata and controls

66 lines (40 loc) · 2.17 KB

잃어버린 괄호 (1541)

난이도 : silver 2

문제

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

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

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

입력

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

출력

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

Idea

수식에서 최소값을 만들기 위해서는 괄호를 이용해 최대한 많은 '-'를 만들어야 한다. '-'가 한번 나온 순간부터 뒤의 연산자들은 괄호를 이용해 전부 음수 연산으로 만들수 있다. '-'가 처음 나타나는 인덱스를 구해서 해당 인덱스 이후부터는 전부 음수연산을 해주면 된다.

Code

import java.io.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String formula = br.readLine();

        formula+='+';//마지막에 부호를 추가함으로써 계산완료
        int result = 0;
        String number = "";

        int minusIndex = formula.indexOf('-');//'-'의 첫 인덱스 혹은 -1

        if(minusIndex == -1)
            minusIndex = formula.length();

        for(int i=0;i<formula.length();i++){

            if(formula.charAt(i)=='-' || formula.charAt(i)=='+'){

                if(minusIndex < i)//무조건 뺌
                    result -= Integer.parseInt(number);
                else//무조건 더함
                    result += Integer.parseInt(number);
                number = "";
              
            }else{
                number += formula.charAt(i);
            }
        }
        System.out.println(result);
    }
}