본문 바로가기
알고리즘/백준 Baekjoon

백준 1541번 잃어버린 괄호(JAVA) - 그리디

by 꾸준함 2023. 2. 15.

백준 1541번

 

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문제설명

문자로된 식을 입력 받고 그 해당 식의 값이 최소로 만드는 괄호의 위치를 찾아서 계산 후에

최솟값을 출력한다.

 

 

접근

1. - 를 기준으로 문자열을 나눈다.

2. 나눠진 문자열들을 '+' 기준으로 나눈다음 각각 다 더한다.

3. 첫번째 값은 더해주고 나머지는 뺴주면서 최솟값으로 만든다.

 

 

코드

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String args[]) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        
        String[] sb = bf.readLine().split("-");
        int res = 0 ;
        
        for(int i=0;i<sb.length;i++){
            int temp=0;
            
            String[] add = sb[i].split("\\+");
            
            for(int j=0;j<add.length;j++){
                temp+= Integer.parseInt(add[j]);
            }
            if(i==0){
                res += temp;
            }else{
                res -= temp;
            }
        }
        System.out.println(res);
    }

}

풀이

최솟값이 되려면 큰 수들을 빼주면 되는데 +를 먼저 수행한다음 -를 수행한다면 최솟값이 나온다.

>> 처음 풀 때  split함수에서 "+"를 기준으로 split("+")를 사용해서 값이 이상하게 나왔다. << 주의