백준 1541번 잃어버린 괄호

이상민·2023년 10월 17일
0

알고리즘

목록 보기
72/128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LostBracket {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] str = br.readLine().split("-");
        int sum = 0;
        for (int i = 0; i < str.length; i++) {
            String[] temp = str[i].split("[+]");
            int tempSum = 0;
            for(String s : temp){
                tempSum += Integer.parseInt(s);
            }
            if(i == 0){
                sum += tempSum;
            }
            else {
                sum -= tempSum;
            }

        }
        System.out.println(sum);
    }
}

풀이방법

📢 이 풀이의 핵심은 가장 작은 수가 나오는 경우의 수를 찾는것이다.
값이 가장 작아지도록 괄호를 치려면, -값이 가장 커지도록 괄호를 해야한다.
즉, -를 기준으로 문자열을 나눠줘야 한다는 것이 핵심이다.

  1. 문자열을 - 를 기준으로 나눠서 저장한다.
  2. 저장한 문자열은 + 연산과 섞여 있는데 +를 기준으로 다시 나눠주고, tempSum에 저장해준다.
    (split("+") 사용시 이스케이프문자를 같이 사용해 주어야 한다.)
  3. 첫 문자열은 무조건 양수이므로 처음 tempsum은 sum에 더해주고,
    나머지 tempsum은 전부 빼준다.

후기

괄호를 하나씩 놓아서 최솟값을 찾아보는 완전탐색을 사용해보려했는데,
설계가 감이 안잡혔다.
-를 기준으로 문자열을 나눠야 가장 값이 작아지는 것을 알지 못했다,,
또한 split 메서드 사용시 +,*,^는 이스케이프 문자를 사용해야 한다는 것도 새로 알 수 있었다.

profile
개린이

0개의 댓글