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 |