알고리즘 풀이/백준

★ [백준][Java] 9935번 문자열 폭발 (문자열)

배게 2021. 9. 20. 18:32
728x90

210924

배열로 하면 시간 더 단축 가능 +

stack안쓰고 배열로 풀긴 했는데 result값은 StringBuilder로 했음

result 마저도 StringBuilder로 하지 말고 배열로 하면 시간 더 단축 가능

bombStr 일치할 경우에는 index를 bombStr.length()-1의 값만큼 index를 빼주면 된다..

delete할 필요 없음

참고 : https://www.acmicpc.net/source/33187159

 

 

 

 

시간초과

 

Line:41

 

for (Character character : st) {
System.out.println(character);
}

 

->

 

StringBuilder sBuilder = new StringBuilder();
for (Character character : st) {
sBuilder.append(character);
}

 

시간 더 단축

Stack -> Array (쓸데없는 pop()을 안해주고 index만 바꿔서 이렇게 되는 것 같음)

참고 : https://www.acmicpc.net/source/33187159

배열로 바꾸는 것은 실패해서 포기.. 너무 디테일하게 다 해줘야함

 

 

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
 
 
public class Main {
        
    private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    
    
    public static void main(String[] args) throws IOException{
        String inputStr = br.readLine();
        String bombStr = br.readLine();
        char trigger = bombStr.charAt(bombStr.length()-1);
        
        Stack<Character> st = new Stack<>();
        
        Loop1:
        for(int i=0; i<inputStr.length(); i++) {
            char curr = inputStr.charAt(i);
            st.push(curr);
            if(st.peek()==trigger && st.size()>=bombStr.length()) {
                for(int j=0; j<bombStr.length(); j++) {
                    if(st.get(st.size()-1-j) 
                            != bombStr.charAt(bombStr.length()-1-j)) {
                        continue Loop1;
                    }
                }
                for(int j=0; j<bombStr.length(); j++) {
                    st.pop();
                }
            }
        }
        if(st.isEmpty()) System.out.println("FRULA");
        
        StringBuilder sBuilder = new StringBuilder();
        for (Character character : st) {
            sBuilder.append(character);
        }
        
        System.out.println(sBuilder.toString());
        
        
        // 완전탐색 이렇게 하면 시간초과
        /*String inputStr = br.readLine();
        String bombStr = br.readLine();
        int prevLeng = 0;
        
        
        while(true) {
            prevLeng = inputStr.length();
            inputStr = inputStr.replaceAll(bombStr,"");
            if(prevLeng==inputStr.length()) break;
        }
        inputStr = (inputStr.equals(""))? "FRULA" : inputStr;
        System.out.println(inputStr);*/
                
        
        
//        bw.write("");
//        bw.flush();
//        bw.close();
        
            
        
    }
    
//    private static int stoi(String input) {
//        return Integer.parseInt(input);
//    }
    
}
cs