Problem Solving

[Java] 백준_잃어버린괄호_1541

luminous13 2022. 11. 8. 18:21

문제

풀이

최솟값을 구하기 위해서는 가능한 큰 수를 빼야한다는 점을 알고 있는게 포인트였던 문제

더하기로 연결된 피연산자들을 모두 먼저 더한 결과값을 -로 빼주면 최솟값이 된다.

 

예를들어 100 - 40 + 50 + 74 - 30 + 29 -45 + 43 + 11 이라는 배열이 있다고 가정한다면

100 - (40 + 50 + 74) - (30 + 29) -(45 + 43 + 11) 와 같이 괄호를 쳐야 최솟값이 될 것이다.

괄호란 먼저 연산을 한다는 의미니깐 먼저 합을 계산한 뒤 마지막에 첫 번째 값을 제외한 나머지 값만 빼주면 된다.

 

크게 보자면 첫 번째로 '-'을 구분자로 하여 문자열을 구분한 다음에 반복을한다

두번째로 현재 문자열을 또 다시 '+'로 나누어 모두 더한 뒤

첫 번째 요소만 더하고 나머지 요소는 빼면 최솟값이 된다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package 백준;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
* */
public class 잃어버린괄호_1541 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        int answer = 0;
 
        String[] arr = input.split("-");    // 10, 20+30+40
        for (int i=0; i<arr.length; i++) {
            int sum = sum(arr[i]);
 
            if (i == 0)
                answer += sum;
            else
                answer -= sum;
        }
        System.out.println(answer);
    }
 
    public static int sum(String str) {
        int sum = 0;
        String[] numArr = str.split("\\+");
        for (String num : numArr) {
            sum += Integer.parseInt(num);
        }
        return sum;
    }
}
 
cs