https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
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
36
37
38
39
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
String[] arr = s.split("-");
int[] ans = new int[50];
int n = 0;
for (int i = 0; i < arr.length; i++) {
int cnt = 0;
if (arr[i] != "") {
String[] arr2 = arr[i].split("\\+");
for (int j = 0; j < arr2.length; j++) {
cnt += Integer.parseInt(arr2[j]);
}
ans[n] = cnt;
n++;
}
}
int num = 0;
if (arr[0] == "") {
num = -ans[0];
} else {
num = ans[0];
}
for (int i = 1; i < ans.length; i++) {
num -= ans[i];
}
System.out.println(num);
}
}
|
cs |
그리디 문제를 풀때 어떤 것을 기준으로 잡느냐가 정말 중요한 것 같다. 값이 최소가 나오는게 목표이기 때문에
'-'(마이너스)를 기준으로 나눠주는게 중요하다
55-50+40 일때 55-(50+40)이 되기 위해서는 문자열을 입력받고 -> String arr=s.split("-")를 이용해서 마이너스 기호를 기준으로 수를 split해준 다음 그걸 배열에 넣는것을 생각해볼 수 있다.
그러면 arr[0]=55 arr[1]=50+40이 된다.
덧셈을 진행시켜주기 위해서는 50+40을 덧셈기호를 기준으로 split시켜주면 된다. 얘 또한 위의 과정과 똑같긴 한데
String[] arr2 = arr[i].split("\\+");
\\을 써준 이유는
Dangling meta character '+' near index 0에러 때문이다. 문자열을 "+"을 기준으로 잘라줄 때 생기는 에러로 +가 덧셈기호로 작동하기 위해 \\을 붙여준다고 생각하면 된다.(이스케이프 문자)
https://donghyeon.dev/java/2019/06/05/Dangling-meta-character-'+'-near-index-0-%ED%95%B4%EA%B2%B0/
Dangling meta character '+' near index 0 해결
java.util.regex.PatternSyntaxException: Dangling meta character ‘+’ near index 0
donghyeon.dev
'알고리즘 > 그리디' 카테고리의 다른 글
[java 백준] 골드 5/ 11000번 강의실 배정 (0) | 2022.08.06 |
---|---|
[C 백준] 실버 4/ 13305번 주유소 (0) | 2022.03.11 |
[java 백준]골드 4/ 1744번 수묶기 (0) | 2022.02.11 |
[java 백준] 실버 2/1931번 회의실 배정 (0) | 2022.02.08 |
[java 백준] 실버 4/ 1783번 병든 나이트 (0) | 2022.02.06 |
댓글