#1541 잃어버린 괄호 (JAVA)

문제 정보

문제 링크

logic 설명

_주어진 식에 적절하게 괄호를 쳐서, 식의 값을 최소화하는 문제입니다.
지금 고려해야하는 연산자가 '+','-' 두 가지인 걸 고려하면
최소화시키기 위해서는 '-' 연산자의 영향을 최대한 많은 피연산자에 주면 됩니다.
말로 하니까 좀 어려운데, 주어진 test case를 토대로 설명해보겠습니다.

55-50+40 의 경우, 55-(50+40) = -35 가 도출됩니다.
55-40+40-35+70 의 경우, 55-(40+40)-(35+70) = -130 이 도출됩니다.

즉 '-' 연산자를 기준으로 식을 분리하여 각각의 값을 계산한 뒤,
'-' 연산자를 적용시키면 문제가 해결됩니다.

코드로 살펴보겠습니다._

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Array;
import java.util.*;



class Main {

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

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

        String[] arr = s.split("-");
        ArrayList<Integer> iarr = new ArrayList<>();

        for(int i=0;i<arr.length;i++){
            String[] temp = arr[i].split("\\+");
            int sum=0;
            for(int j=0;j<temp.length;j++){
                sum+=Integer.parseInt(temp[j]);
            }
            iarr.add(sum);
        }
        int answer = iarr.get(0);
        for(int i=1;i<iarr.size();i++){
            answer -= iarr.get(i);
        }

        System.out.println(answer);


        br.close();
    }

}

우선 JAVA 언어를 선택한 이유는, '-' 연산자를 기준으로 문자열을 분리해야 하는데
이 때 string의 split 함수가 있으면 편리하기 때문에 선택하였습니다.

먼저 string 배열 arr에 '-' 연산자를 기준으로 분리된 문자열들을 집어넣습니다.
그러면 arr에는 숫자만 들어있거나, '+' 연산자가 포함된 수식이 있을 것입니다.
따라서 arr를 for-loop으로 돌면서 다시 '+' 연산자를 기준으로 문자열을 분리하며,
그 결과를 string 배열 temp에 담습니다. 따라서 배열 temp 에는 반드시 숫자만 들어있습니다.

이제 temp에 들어있는 숫자들을 모두 더해줌으로써 수식을 계산해주고,
그 결과를 Integer 배열 iarr에 담아줍니다.

그러면 iarr에 담긴 값들은 첫 번째 값을 제외하곤 모두 -부호의 영향을 받는 숫자들입니다.
따라서 for-loop을 돌면서 부호를 포함하여 식의 값을 계산해주면, 답이 나옵니다.

🌟만약 A를 기준으로 split 을 할 때 해당 식이 A를 포함하지 않은 경우에는,
size 1의 배열로 원래 string이 담기게 되어 logic을 해치지 않습니다.

좋은 웹페이지 즐겨찾기