오늘의 문제는 문자열을 파싱 하는 게 가장 중요한 포인트인 문제입니다.
문제 해결 방안
1. "-"를 기준으로 문자열을 파싱 하기
2. 각 분리된 문자 안에 있는 숫자를 전부 더해준 다음 뺄샘 해주기
다음과 같은 예시로 설명드리겠습니다.
10 - 50 + 30 + 20 - 10 + 100
이 문제에서 요구하는 최소를 구하기 위해서는 뺄샘을 기준으로 덧셈을 통해 큰 수를 먼저 만든 다음 뺄샘을 연산하면 최소를 구할 수 있습니다.
10 - (50 + 30 + 20) - (10 + 100) = 10 - 100 - 110 = -200
이렇게 뺄샘을 기준으로 덧셈 연산을 위해 저는 split 메서드를 사용하였습니다. split("\\-")을 기준으로 분리된 문자열은 다음과 같습니다.
10 50+30+20 10+100
다음은 각 분리된 문자 안에 있는 숫자를 전부 더해준 다음 뺄샘 해줘야 합니다.
이때, 주의할 점은 첫 번째 숫자는 빼면 안 됩니다!!! 첫 번째 숫자는 양수로 계산합니다.
result = 10;
50+30+20에 대해서 "+" 기준으로 split하면 [50, 30, 20]이 나옵니다.
그러면 이에 대해서는 50+30+20을 수행하고, result - 더한 값을 연산하면 됩니다.
public class Main_1541 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String[] nums = str.split("\\-");//뺄샘 기준으로 분리
int result = 0;
//첫번째 숫자는 양수
String[] plus = nums[0].split("\\+");
for (int i = 0; i < plus.length; i++) {
result += Integer.parseInt(plus[i]);
}
//다음 숫자부터는 빼주기
for (int i = 1; i < nums.length; i++) {
String[] tmp = nums[i].split("\\+");
int sum = 0;
for (int j = 0; j < tmp.length; j++) {
sum += Integer.parseInt(tmp[j]);
}
result -= sum;
}
System.out.println(result);
}
}
'Algorithm > 백준' 카테고리의 다른 글
[백준] BOJ 2504 괄호의 값(자바/스택) (0) | 2023.01.26 |
---|---|
[백준]BOJ 10799 쇠막대기 (0) | 2023.01.19 |
[백준]BOJ 14719 빗물(자바) (0) | 2023.01.05 |
[백준] BOJ 1316 그룹 단어 체커(자바) (0) | 2023.01.02 |
[백준]BOJ 1012 유기농 배추(자바/BFS/메모리 초과) (0) | 2022.12.31 |