백준 1541 - 잃어버린 괄호

Updated:

Java

1541 번 - 잃어버린 괄호

문제

접근 방법

괄호를 적절히 쳐 수식의 최소 값이 나오게 하려면,
연산자 -가 나온 기점을 기준으로, 앞의 피 연산자의 합과, - 이후의 피 연산자의 합의 차를 구하면 된다.

-+를 기준으로 문자열을 나누는 방법은 StringTokenizer의 매개변수 -|+로 주는 것만 주의하면 쉽게 풀 수 있었다.

코드

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	
		String str = br.readLine();
    	StringTokenizer stk = new StringTokenizer(str , "-|+");
    	List<Integer> list = new ArrayList<>();
		// 먼저 피 연산자를 다 구한다.
    	while(stk.hasMoreTokens()) {
    		list.add(stoi(stk.nextToken()));
    	}
    	char[] arr = str.toCharArray();
    	int len = arr.length, idx = 1;
    	// 최소 값을 만들기 위해, -가 처음 나오는 기점을 찾는다.
    	for(int i = 0; i < len; i++) {
    		if(arr[i] == '+') {
    			idx++;
    		}
    		else if(arr[i] == '-'){
    			break;
    		}
    	}
    	
    	int plusSum = 0, minusSum = 0;
		// 처음 나오는 연산자 - 보다 앞의 피 연산자를 더한다
    	for(int i = 0; i < idx; i++)
    		plusSum += list.get(i);
    	int size = list.size();
		// 처음 나오는 연산자 - 보다 뒤의 피 연산자를 더한다
    	for(int i = idx; i < size; i++)
    		minusSum += list.get(i);
    	
    	System.out.println(plusSum - minusSum);
    	br.close();
	}
	
	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

개선할 점