자바생
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
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그