알고리즘

백준 9935번 문자열 폭발 (JAVA)

박카스마시며코딩 2023. 12. 1. 20:55

https://www.acmicpc.net/problem/9935

 

9935번: 문자열 폭발

첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모

www.acmicpc.net

 

저는 스택을 통해 문제를 해결하였습니다.

스택으로 이전의 문자들을 저장하고, 스택이 폭발 문자열의 길이보다 크다면, 위에서부터 폭발 문자열과 비교하여 같다면 스택에서 전부 빼어 문제를 풀었습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;

public class BOJ_9935 {

    private static final int NOT_FOUND = -1;
    private static final String EMPTY = "FRULA";

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String bombStr = br.readLine();
        Stack<Character> stack = new Stack<>();
        for(int i = 0 ; i < str.length() ; i++){
            char ch = str.charAt(i);
            stack.add(ch);
            if(stack.size() >= bombStr.length()){
                boolean flag = true;
                for(int j = 0 ; j < bombStr.length() ; j++){
                    if(stack.get(stack.size() - bombStr.length() + j) != bombStr.charAt(j)){
                        flag = false;
                        break;
                    }
                }
                if(!flag) {
                    continue;
                }
                for(int j = 0 ; j < bombStr.length() ; j++){
                    stack.pop();
                }
            }
        }
        if(stack.size() == 0) {
            System.out.println(EMPTY);
        }
        StringBuilder sb = new StringBuilder();
        while(!stack.isEmpty()){
            sb.append(stack.pop());
        }
        sb = sb.reverse();
        System.out.println(sb.toString());
    }
}