카테고리 없음

백준 1541 - 잃어버린 괄호

jin_j_i_n 2021. 4. 1. 17:56

www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

오늘따라 문제가 왜이렇게 안풀리는지 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

간단한 문자열 문제이지만 2시간은 헤맨듯 하다...어디서 잘못된지도 몰라서 반례만 좀비처럼 찾아다녔음..

내가 생각한. 풀이법은 

1. 연산자 기준으로 숫자를 arraylist에 넣는다.

2.첫번째 마이너스 기준으로 이전에는 + 연산을해서 더해주고 , 그 이후 수는 -를 해준다.

어차피 마이너스가 존재한다면 , 마이너스 이후로의 숫자들은 전부 - 연산을 해주면 되는데 쓸데없이 괄호치고 + 연산해줘서 따로 -연산해주고,,,,,과정이 복잡하다보니까 틀린 것 같다.

2번째는 자포자기한상태로 검색하다가 아 그렇지 하고 고친것..

이외에도 split연산으로 잘라준다거나, 정규식을 써준다거나 해서 숫자와 연산자를 분리하는 방법이 있었다. 구글링해보면 진짜 다들 너무 다양한 방법으로 풀었어서 풀이가 엄청 도움된다거나 그러진 않았음....

 

암튼 문자열 문제는 초장에 잘 생각 안하면 계속 말리는것 같다 문자열진짜너무어려워

 

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
import java.util.*;
public class B1541 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] s = sc.next().toCharArray();
        ArrayList<Integer> minusIdx = new ArrayList<>();
        ArrayList<Integer> nums = new ArrayList<>();
        int minIdx = 0;
        boolean isFirst = true;
        int firstMinus = -1;
        int tmp = 0;
 
        for(int i=0 ; i<s.length ; i++) {
            if(s[i] == '-') {
                if(isFirst) {
                    isFirst = false;
                    firstMinus = nums.size();
                }
                minusIdx.add(minIdx++); 
            }
            else if (s[i] == '+'continue;
            else{
                int t = s[i] - '0';
                tmp = tmp*10 + t;
                if(i == s.length -1 || s[i+1== '+' || s[i+1== '-'){
                    nums.add(tmp);
                    tmp = 0;
                }
            }
        }
        int ans = 0;
        if(firstMinus != -1) {
        for(int i=0; i<firstMinus; i++) {
            ans += nums.get(i);
        }
        for(int i=firstMinus; i <nums.size(); i++) {
            ans -= nums.get(i);
        }
    }else{
        for(int i=0; i<nums.size(); i++) {
            ans += nums.get(i);
        }
    }   
        System.out.println(ans);
 
    }    
}
 
cs