삽질메모장

백준 1541 번: 잃어버린 괄호(java) 본문

Knowledge/알고리즘

백준 1541 번: 잃어버린 괄호(java)

shovel 2024. 2. 29. 15:23

 

문제
 

1541번: 잃어버린 괄호

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

www.acmicpc.net

난이도 : 실버2

유형 : 그리디, 파싱

 

접근법

식을 최솟값으로 만들어야 하므로 -기호가 붙은 수들 이후는 모두 합산을 해야한다.

그러므로 -기준으로 식을 분리하고 분리된 각각의 식들은 최대한의 음수가 되기위해 합산해준다

1. 입력된 식을 StringTokenizer으로 받아 "-" 기준으로 식을 분리한다.

2. 분리된 각각의 토큰(식) 들을 합산한다.

3. 식의 첫번째값은 Integer.MAX_VALUE 와 같다면(식이 처음 입력되었다면) 대입, 이후는 위 2번 과정을 반복

 

풀이

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(bf.readLine(),"-"); // 먼저 "-"기준으로 식 분리
        int result = Integer.MAX_VALUE;
        while (st.hasMoreTokens()){
            StringTokenizer plusSt = new StringTokenizer(st.nextToken(), "+"); // "-"기준으로 분리된 식을 각각 "+"으로 분해
            int tempVal =0;
            while(plusSt.hasMoreTokens()){ 
                tempVal += Integer.parseInt( plusSt.nextToken()); //+로 분해된 식 합산
            }

            if(result == Integer.MAX_VALUE){ //첫번째 수
                result = tempVal;
            }else{ // 이후 - 될 뒷자리 수들
                result -= tempVal;
            }
        }
        System.out.println(result);
    }
}