코딩테스트/백준

[Dev-Ping9] 백준 1541번 - 잃어버린 괄호 (Java)

DevPing9_ 2022. 1. 9. 22:56

 

 

# 문제 설명

 괄호는 여러개가 될 수 있다

 값을 최소로 만들어야 한다.

 '-' 연산자 앞에 다음 '-' 연산자가 나오기전까지 괄호를 쳐주면된다.

 단순한 구현문제이다.

 

# 코드 구현

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;

public class Main{
    static int[] number;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        List<Integer> minus = new ArrayList<>();         

        //init
        int idx=1;
        for(int i=0;i<input.length(); i++){
            if(input.charAt(i)=='-' || input.charAt(i)=='+'){
                if(input.charAt(i)=='-'){
                    minus.add(idx);
                }
                idx++;
            }
        }
        minus.add(idx); // 마지막 숫자 뒤 인덱스

        input = input.replace("+"," ");
        input = input.replace("-"," "); 
        String[] numStrings = input.split(" ");
        number = new int[numStrings.length];
        idx = 0; int sum=0;
        for(String numString : numStrings){
            number[idx] = Integer.parseInt(numStrings[idx]);
            sum+=number[idx++];
        }

        // 최소값이니까 '-' 앞에서 괄호로 최대한 크게 묶으면 됨
        // find where to make ()
        // 괄호 한번치는게 아니라 여러번 칠수 있는거였음....
        idx= 0;
        for(int i=0; i<minus.size()-1; i++){
            int temp = 0;
            for(int j=minus.get(i); j<minus.get(i+1); j++){
                temp+=number[j];
            }
            sum-= temp*2 ;
        }
        System.out.println(sum);       
    }
}

 

 

728x90