728x90
오답 노트 & 새로 알게 된 점
해당 문제는 생각하는데 오래 걸렸다. 처음에는 로직이 틀려 틀렸습니다가 나왔고, 나중에는 배열 index 때문에 런타임 에러가 나왔다.
문제 풀이를 설명하자면, 처음부터 -가 나올 때까지 숫자들은 모두 더해주고, 그 뒤에는 -든 +든 앞에서 더해준 숫자에서 빼주면 된다. 해당 원리는 -, + 상관없이 괄호를 쳐주게 되면 +를 무용지물로 만들 수 있기 때문이다.
예를 들어 100 - 100 + 100 - 100 + 100 - 100에서 +부분을 괄호로 묶어주면 무슨 말인지 알게 된다.
따라서 문제를 풀 때, -를 delim(구분자)로 설정하고 나눠주었다.
구분자를 - 로 하는 이유는 -가 나올 때까지의 숫자들을 구하기 위해서이다. 따라서 분리해놓은 문자열들을 arraylist에 추가한다. 그렇게 되면 -가 나오기 전까지의 숫자들은 당연하게 arraylist의 0번째 index에 있게 된다. 해당 문자열은 +로만 이뤄져 있기 때문에 또다시 + 구분자를 사용하여 int형으로 변환시켜준다. 이 변환시켜준 숫자들을 더하면 앞에서 말한 -가 나오기 전까지의 숫자들의 합이다. 그래서 뒤에 있는 숫자들은 +든 -든 상관없이 해당 합에서 무조건 빼주기만 하면 된다.
여기서 if 조건이 있는 이유는 50 + 50일 경우, 더해준 값만이 답이기 때문에 조건이 필요하게 된다.
코드
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
40
41
42
43
44
45
46
47
48
49
50
51
|
package Greedy;
// BOJ 1541 잃어버린 괄호
import java.util.*;
public class BOJ1541 {
static int atoi(String str){
return Integer.parseInt(str);
}
static ArrayList<Integer> al_int = new ArrayList<>();
static ArrayList<String> al_str = new ArrayList<>();
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String str = sc.next();
// -를 기준으로 분리시킴
StringTokenizer st = new StringTokenizer(str, "-");
//분리시킨 것들 모두 arraylist에 집어넣음
while(st.hasMoreTokens()){
al_str.add(st.nextToken());
}
//-가 나오기 전까지 앞자리 숫자들임
//이 숫자들은 괄호를 쳐도 뺄수가 없기 때문에 무조건 더해줘야함
st = new StringTokenizer(al_str.get(0), "+");
//그래서 -가 나올 때까지 숫자들을 전부 arrarylist에 넣어줘서 더해줌.
while(st.hasMoreTokens()){
al_int.add(atoi(st.nextToken()));
}
int sum = 0;
for(int index : al_int)
sum += index;
//예를 들어 50 + 50이면 size가 하나밖에 없기 때문에
//if 조건을 내세워줌
if(al_str.size() != 1) {
for (int i = 1; i < al_str.size(); i++) {
st = new StringTokenizer(al_str.get(i), "+-");
while (st.hasMoreTokens()) {
sum -= atoi(st.nextToken());
}
}
}
System.out.print(sum);
}
}
|
cs |
728x90
'BOJ(Java)' 카테고리의 다른 글
자바(백준) 13164 행복 유치원 (0) | 2021.07.01 |
---|---|
자바(백준) 20365 블로그2 (0) | 2021.06.30 |
자바(백준) 20300 서강근육맨 (0) | 2021.06.26 |
자바(백준) 20115 에너지 드링크 (0) | 2021.06.25 |
자바(백준) 11508 2+1 세일 (0) | 2021.06.25 |